

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/Mine.jpg">
  <link rel="icon" href="/img/Mine.jpg">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="Chiam">
  <meta name="keywords" content="算法，安全">
  
    <meta name="description" content="『算法-ACM 竞赛-历程』ACMer 退役记(ACM 的心路历程）一个了 Loser 相对所有 ACM 爱好者说一句话，坚持下去，坚持真的很不容易，高压的训练，碾压式的实力差距，但是 AC 的快感，我输了，我认了，我选择了退役，在我学完了 80%的 ACM 知识，我选择退役，我是懦夫，是胆小鬼，是废物。在上大学之前，我是从来没接触过编程，更别说算法基础，然后大一下学期开始接触 ACM，很坎坷，脑">
<meta property="og:type" content="article">
<meta property="og:title" content="『算法-ACM竞赛-历程』ACMer退役记(ACM的心路历程）">
<meta property="og:url" content="http://example.com/2023/12/06/%E3%80%8E%E7%AE%97%E6%B3%95-ACM%E7%AB%9E%E8%B5%9B-%E5%8E%86%E7%A8%8B%E3%80%8FACMer%E9%80%80%E5%BD%B9%E8%AE%B0(ACM%E7%9A%84%E5%BF%83%E8%B7%AF%E5%8E%86%E7%A8%8B%EF%BC%89/index.html">
<meta property="og:site_name" content="Chiam 的个人主页">
<meta property="og:description" content="『算法-ACM 竞赛-历程』ACMer 退役记(ACM 的心路历程）一个了 Loser 相对所有 ACM 爱好者说一句话，坚持下去，坚持真的很不容易，高压的训练，碾压式的实力差距，但是 AC 的快感，我输了，我认了，我选择了退役，在我学完了 80%的 ACM 知识，我选择退役，我是懦夫，是胆小鬼，是废物。在上大学之前，我是从来没接触过编程，更别说算法基础，然后大一下学期开始接触 ACM，很坎坷，脑">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2023-12-05T16:11:44.346Z">
<meta property="article:modified_time" content="2023-12-05T16:18:55.505Z">
<meta property="article:author" content="Chiam">
<meta property="article:tag" content="算法，安全">
<meta name="twitter:card" content="summary_large_image">
  
  
  
  <title>『算法-ACM竞赛-历程』ACMer退役记(ACM的心路历程） - Chiam 的个人主页</title>

  <link  rel="stylesheet" href="https://lib.baomitu.com/twitter-bootstrap/4.6.1/css/bootstrap.min.css" />



  <link  rel="stylesheet" href="https://lib.baomitu.com/github-markdown-css/4.0.0/github-markdown.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/hint.css/2.7.0/hint.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css" />



<!-- 主题依赖的图标库，不要自行修改 -->
<!-- Do not modify the link that theme dependent icons -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />


  <link id="highlight-css" rel="stylesheet" href="/css/highlight.css" />
  
    <link id="highlight-css-dark" rel="stylesheet" href="/css/highlight-dark.css" />
  



  
<link rel="stylesheet" href="/css/custom.css">



  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    Fluid.ctx = Object.assign({}, Fluid.ctx)
    var CONFIG = {"hostname":"example.com","root":"/","version":"1.9.5-a","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false,"scope":[]},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"left","visible":"hover","icon":"❡"},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"code_language":{"enable":true,"default":"TEXT"},"copy_btn":true,"image_caption":{"enable":true},"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"placement":"right","headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":2},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"follow_dnt":true,"baidu":null,"google":{"measurement_id":null},"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml","include_content_in_search":true};

    if (CONFIG.web_analytics.follow_dnt) {
      var dntVal = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
      Fluid.ctx.dnt = dntVal && (dntVal.startsWith('1') || dntVal.startsWith('yes') || dntVal.startsWith('on'));
    }
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
  


  
<meta name="generator" content="Hexo 6.3.0"></head>


<body>
  

  <header>
    

<div class="header-inner" style="height: 70vh;">
  <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>Chiam&#39;s Blogs</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                
                <span>首页</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                
                <span>归档</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                
                <span>分类</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                
                <span>关于</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/links/">
                
                <span>友链</span>
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              <i class="iconfont icon-search"></i>
            </a>
          </li>
          
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">
              <i class="iconfont icon-dark" id="color-toggle-icon"></i>
            </a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

  

<div id="banner" class="banner" parallax=true
     style="background: url('/img/default.png') no-repeat center center; background-size: cover;">
  <div class="full-bg-img">
    <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
      <div class="banner-text text-center fade-in-up">
        <div class="h2">
          
            <span id="subtitle" data-typed-text="『算法-ACM竞赛-历程』ACMer退役记(ACM的心路历程）"></span>
          
        </div>

        
          
  <div class="mt-3">
    
    
      <span class="post-meta">
        <i class="iconfont icon-date-fill" aria-hidden="true"></i>
        <time datetime="2023-12-06 00:11" pubdate>
          2023年12月6日 凌晨
        </time>
      </span>
    
  </div>

  <div class="mt-1">
    
      <span class="post-meta mr-2">
        <i class="iconfont icon-chart"></i>
        
          62k 字
        
      </span>
    

    
      <span class="post-meta mr-2">
        <i class="iconfont icon-clock-fill"></i>
        
        
        
          517 分钟
        
      </span>
    

    
    
  </div>


        
      </div>

      
    </div>
  </div>
</div>

</div>

  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="side-col d-none d-lg-block col-lg-2">
      

    </div>

    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div id="board">
          <article class="post-content mx-auto">
            <h1 id="seo-header">『算法-ACM竞赛-历程』ACMer退役记(ACM的心路历程）</h1>
            
            
              <div class="markdown-body">
                
                <h1 id="『算法-ACM-竞赛-历程』ACMer-退役记-ACM-的心路历程）"><a href="#『算法-ACM-竞赛-历程』ACMer-退役记-ACM-的心路历程）" class="headerlink" title="『算法-ACM 竞赛-历程』ACMer 退役记(ACM 的心路历程）"></a>『算法-ACM 竞赛-历程』ACMer 退役记(ACM 的心路历程）</h1><p>一个了 Loser 相对所有 ACM 爱好者说一句话，坚持下去，坚持真的很不容易，高压的训练，碾压式的实力差距，但是 AC 的快感，我输了，我认了，我选择了退役，在我学完了 80%的 ACM 知识，我选择退役，我是懦夫，是胆小鬼，是废物。<br>在上大学之前，我是从来没接触过编程，更别说算法基础，然后大一下学期开始接触 ACM，很坎坷，脑子不算聪明，大量刷题，做题，看算法，学习成绩倒退，有人说这有什么关系，我其实不是一个很聪明的人，大都是时间换效率，有人说我这是假努力，是愚勤。怎么说也好，都是自己不够优秀，开始否定自己。<br>可能队友的离开是导致我退出的最大原因，我们三个校赛，省赛，过关斩 ji。区域赛差点拿奖，我们才学了刚刚一年，还有一年大二，我满怀期望，未来可期，最后都化为泡影。<br>一路上，一直瞧不起那些中途放弃的人，觉得他们没梦想，没毅力。却发现，现实面前，确实有一些难以理性对待。<br>最后，无论是新手是大佬，有什么关于 ACM 的问题，和材料都可以咨询我？</p>
<p>奉上楼天城的心路历程，希望后生，可以坚持到底</p>
<figure class="highlight mathematica"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br><span class="line">757</span><br><span class="line">758</span><br><span class="line">759</span><br><span class="line">760</span><br><span class="line">761</span><br><span class="line">762</span><br><span class="line">763</span><br><span class="line">764</span><br><span class="line">765</span><br><span class="line">766</span><br><span class="line">767</span><br><span class="line">768</span><br><span class="line">769</span><br><span class="line">770</span><br><span class="line">771</span><br><span class="line">772</span><br><span class="line">773</span><br><span class="line">774</span><br><span class="line">775</span><br><span class="line">776</span><br><span class="line">777</span><br><span class="line">778</span><br><span class="line">779</span><br><span class="line">780</span><br><span class="line">781</span><br><span class="line">782</span><br><span class="line">783</span><br><span class="line">784</span><br><span class="line">785</span><br><span class="line">786</span><br><span class="line">787</span><br><span class="line">788</span><br><span class="line">789</span><br><span class="line">790</span><br><span class="line">791</span><br><span class="line">792</span><br><span class="line">793</span><br><span class="line">794</span><br><span class="line">795</span><br><span class="line">796</span><br><span class="line">797</span><br><span class="line">798</span><br><span class="line">799</span><br><span class="line">800</span><br><span class="line">801</span><br><span class="line">802</span><br><span class="line">803</span><br><span class="line">804</span><br><span class="line">805</span><br><span class="line">806</span><br><span class="line">807</span><br><span class="line">808</span><br><span class="line">809</span><br><span class="line">810</span><br><span class="line">811</span><br><span class="line">812</span><br><span class="line">813</span><br><span class="line">814</span><br><span class="line">815</span><br><span class="line">816</span><br><span class="line">817</span><br><span class="line">818</span><br><span class="line">819</span><br><span class="line">820</span><br><span class="line">821</span><br><span class="line">822</span><br><span class="line">823</span><br><span class="line">824</span><br><span class="line">825</span><br><span class="line">826</span><br><span class="line">827</span><br><span class="line">828</span><br><span class="line">829</span><br><span class="line">830</span><br><span class="line">831</span><br><span class="line">832</span><br><span class="line">833</span><br><span class="line">834</span><br><span class="line">835</span><br><span class="line">836</span><br><span class="line">837</span><br><span class="line">838</span><br><span class="line">839</span><br><span class="line">840</span><br><span class="line">841</span><br><span class="line">842</span><br><span class="line">843</span><br><span class="line">844</span><br><span class="line">845</span><br><span class="line">846</span><br><span class="line">847</span><br><span class="line">848</span><br><span class="line">849</span><br><span class="line">850</span><br><span class="line">851</span><br><span class="line">852</span><br><span class="line">853</span><br><span class="line">854</span><br><span class="line">855</span><br><span class="line">856</span><br><span class="line">857</span><br><span class="line">858</span><br><span class="line">859</span><br><span class="line">860</span><br><span class="line">861</span><br><span class="line">862</span><br><span class="line">863</span><br><span class="line">864</span><br><span class="line">865</span><br><span class="line">866</span><br><span class="line">867</span><br><span class="line">868</span><br><span class="line">869</span><br><span class="line">870</span><br><span class="line">871</span><br><span class="line">872</span><br><span class="line">873</span><br><span class="line">874</span><br><span class="line">875</span><br><span class="line">876</span><br><span class="line">877</span><br><span class="line">878</span><br><span class="line">879</span><br><span class="line">880</span><br><span class="line">881</span><br><span class="line">882</span><br><span class="line">883</span><br><span class="line">884</span><br><span class="line">885</span><br><span class="line">886</span><br><span class="line">887</span><br><span class="line">888</span><br><span class="line">889</span><br><span class="line">890</span><br><span class="line">891</span><br><span class="line">892</span><br><span class="line">893</span><br><span class="line">894</span><br><span class="line">895</span><br><span class="line">896</span><br><span class="line">897</span><br><span class="line">898</span><br><span class="line">899</span><br><span class="line">900</span><br><span class="line">901</span><br><span class="line">902</span><br><span class="line">903</span><br><span class="line">904</span><br><span class="line">905</span><br><span class="line">906</span><br><span class="line">907</span><br><span class="line">908</span><br><span class="line">909</span><br><span class="line">910</span><br><span class="line">911</span><br><span class="line">912</span><br><span class="line">913</span><br><span class="line">914</span><br><span class="line">915</span><br><span class="line">916</span><br><span class="line">917</span><br><span class="line">918</span><br><span class="line">919</span><br><span class="line">920</span><br><span class="line">921</span><br><span class="line">922</span><br><span class="line">923</span><br><span class="line">924</span><br><span class="line">925</span><br><span class="line">926</span><br><span class="line">927</span><br><span class="line">928</span><br><span class="line">929</span><br><span class="line">930</span><br><span class="line">931</span><br><span class="line">932</span><br><span class="line">933</span><br><span class="line">934</span><br><span class="line">935</span><br><span class="line">936</span><br><span class="line">937</span><br><span class="line">938</span><br><span class="line">939</span><br><span class="line">940</span><br><span class="line">941</span><br><span class="line">942</span><br><span class="line">943</span><br><span class="line">944</span><br><span class="line">945</span><br><span class="line">946</span><br><span class="line">947</span><br><span class="line">948</span><br><span class="line">949</span><br><span class="line">950</span><br><span class="line">951</span><br><span class="line">952</span><br><span class="line">953</span><br><span class="line">954</span><br><span class="line">955</span><br><span class="line">956</span><br><span class="line">957</span><br><span class="line">958</span><br><span class="line">959</span><br><span class="line">960</span><br><span class="line">961</span><br><span class="line">962</span><br><span class="line">963</span><br><span class="line">964</span><br><span class="line">965</span><br><span class="line">966</span><br><span class="line">967</span><br><span class="line">968</span><br><span class="line">969</span><br><span class="line">970</span><br><span class="line">971</span><br><span class="line">972</span><br><span class="line">973</span><br><span class="line">974</span><br><span class="line">975</span><br><span class="line">976</span><br><span class="line">977</span><br><span class="line">978</span><br><span class="line">979</span><br><span class="line">980</span><br><span class="line">981</span><br><span class="line">982</span><br><span class="line">983</span><br><span class="line">984</span><br><span class="line">985</span><br><span class="line">986</span><br><span class="line">987</span><br><span class="line">988</span><br><span class="line">989</span><br><span class="line">990</span><br><span class="line">991</span><br><span class="line">992</span><br><span class="line">993</span><br><span class="line">994</span><br><span class="line">995</span><br><span class="line">996</span><br><span class="line">997</span><br><span class="line">998</span><br><span class="line">999</span><br><span class="line">1000</span><br><span class="line">1001</span><br><span class="line">1002</span><br><span class="line">1003</span><br><span class="line">1004</span><br><span class="line">1005</span><br><span class="line">1006</span><br><span class="line">1007</span><br><span class="line">1008</span><br><span class="line">1009</span><br><span class="line">1010</span><br><span class="line">1011</span><br><span class="line">1012</span><br><span class="line">1013</span><br><span class="line">1014</span><br><span class="line">1015</span><br><span class="line">1016</span><br><span class="line">1017</span><br><span class="line">1018</span><br><span class="line">1019</span><br><span class="line">1020</span><br><span class="line">1021</span><br><span class="line">1022</span><br><span class="line">1023</span><br><span class="line">1024</span><br><span class="line">1025</span><br><span class="line">1026</span><br><span class="line">1027</span><br><span class="line">1028</span><br><span class="line">1029</span><br><span class="line">1030</span><br><span class="line">1031</span><br><span class="line">1032</span><br><span class="line">1033</span><br><span class="line">1034</span><br><span class="line">1035</span><br><span class="line">1036</span><br><span class="line">1037</span><br><span class="line">1038</span><br><span class="line">1039</span><br><span class="line">1040</span><br><span class="line">1041</span><br><span class="line">1042</span><br><span class="line">1043</span><br><span class="line">1044</span><br><span class="line">1045</span><br><span class="line">1046</span><br><span class="line">1047</span><br><span class="line">1048</span><br><span class="line">1049</span><br><span class="line">1050</span><br><span class="line">1051</span><br><span class="line">1052</span><br><span class="line">1053</span><br><span class="line">1054</span><br><span class="line">1055</span><br><span class="line">1056</span><br><span class="line">1057</span><br><span class="line">1058</span><br><span class="line">1059</span><br><span class="line">1060</span><br><span class="line">1061</span><br><span class="line">1062</span><br><span class="line">1063</span><br><span class="line">1064</span><br><span class="line">1065</span><br><span class="line">1066</span><br><span class="line">1067</span><br><span class="line">1068</span><br><span class="line">1069</span><br><span class="line">1070</span><br><span class="line">1071</span><br><span class="line">1072</span><br><span class="line">1073</span><br><span class="line">1074</span><br><span class="line">1075</span><br><span class="line">1076</span><br><span class="line">1077</span><br><span class="line">1078</span><br><span class="line">1079</span><br><span class="line">1080</span><br><span class="line">1081</span><br><span class="line">1082</span><br><span class="line">1083</span><br><span class="line">1084</span><br><span class="line">1085</span><br><span class="line">1086</span><br><span class="line">1087</span><br><span class="line">1088</span><br><span class="line">1089</span><br><span class="line">1090</span><br><span class="line">1091</span><br><span class="line">1092</span><br><span class="line">1093</span><br><span class="line">1094</span><br><span class="line">1095</span><br><span class="line">1096</span><br><span class="line">1097</span><br><span class="line">1098</span><br><span class="line">1099</span><br><span class="line">1100</span><br><span class="line">1101</span><br><span class="line">1102</span><br><span class="line">1103</span><br><span class="line">1104</span><br><span class="line">1105</span><br><span class="line">1106</span><br><span class="line">1107</span><br><span class="line">1108</span><br><span class="line">1109</span><br><span class="line">1110</span><br><span class="line">1111</span><br><span class="line">1112</span><br><span class="line">1113</span><br><span class="line">1114</span><br><span class="line">1115</span><br><span class="line">1116</span><br><span class="line">1117</span><br><span class="line">1118</span><br><span class="line">1119</span><br><span class="line">1120</span><br><span class="line">1121</span><br><span class="line">1122</span><br><span class="line">1123</span><br><span class="line">1124</span><br><span class="line">1125</span><br><span class="line">1126</span><br><span class="line">1127</span><br><span class="line">1128</span><br><span class="line">1129</span><br><span class="line">1130</span><br><span class="line">1131</span><br><span class="line">1132</span><br><span class="line">1133</span><br><span class="line">1134</span><br><span class="line">1135</span><br><span class="line">1136</span><br><span class="line">1137</span><br><span class="line">1138</span><br><span class="line">1139</span><br><span class="line">1140</span><br><span class="line">1141</span><br><span class="line">1142</span><br><span class="line">1143</span><br><span class="line">1144</span><br><span class="line">1145</span><br><span class="line">1146</span><br><span class="line">1147</span><br><span class="line">1148</span><br><span class="line">1149</span><br><span class="line">1150</span><br><span class="line">1151</span><br><span class="line">1152</span><br><span class="line">1153</span><br><span class="line">1154</span><br><span class="line">1155</span><br><span class="line">1156</span><br><span class="line">1157</span><br><span class="line">1158</span><br><span class="line">1159</span><br><span class="line">1160</span><br><span class="line">1161</span><br><span class="line">1162</span><br><span class="line">1163</span><br><span class="line">1164</span><br><span class="line">1165</span><br><span class="line">1166</span><br><span class="line">1167</span><br><span class="line">1168</span><br><span class="line">1169</span><br><span class="line">1170</span><br><span class="line">1171</span><br><span class="line">1172</span><br><span class="line">1173</span><br><span class="line">1174</span><br><span class="line">1175</span><br><span class="line">1176</span><br><span class="line">1177</span><br><span class="line">1178</span><br><span class="line">1179</span><br><span class="line">1180</span><br><span class="line">1181</span><br><span class="line">1182</span><br><span class="line">1183</span><br><span class="line">1184</span><br><span class="line">1185</span><br><span class="line">1186</span><br><span class="line">1187</span><br><span class="line">1188</span><br><span class="line">1189</span><br><span class="line">1190</span><br><span class="line">1191</span><br><span class="line">1192</span><br><span class="line">1193</span><br><span class="line">1194</span><br><span class="line">1195</span><br><span class="line">1196</span><br><span class="line">1197</span><br><span class="line">1198</span><br><span class="line">1199</span><br><span class="line">1200</span><br><span class="line">1201</span><br><span class="line">1202</span><br><span class="line">1203</span><br><span class="line">1204</span><br><span class="line">1205</span><br><span class="line">1206</span><br><span class="line">1207</span><br><span class="line">1208</span><br><span class="line">1209</span><br><span class="line">1210</span><br><span class="line">1211</span><br><span class="line">1212</span><br><span class="line">1213</span><br><span class="line">1214</span><br><span class="line">1215</span><br><span class="line">1216</span><br><span class="line">1217</span><br><span class="line">1218</span><br><span class="line">1219</span><br><span class="line">1220</span><br><span class="line">1221</span><br><span class="line">1222</span><br><span class="line">1223</span><br><span class="line">1224</span><br><span class="line">1225</span><br><span class="line">1226</span><br><span class="line">1227</span><br><span class="line">1228</span><br><span class="line">1229</span><br><span class="line">1230</span><br><span class="line">1231</span><br><span class="line">1232</span><br><span class="line">1233</span><br><span class="line">1234</span><br><span class="line">1235</span><br><span class="line">1236</span><br><span class="line">1237</span><br><span class="line">1238</span><br><span class="line">1239</span><br><span class="line">1240</span><br><span class="line">1241</span><br><span class="line">1242</span><br><span class="line">1243</span><br><span class="line">1244</span><br><span class="line">1245</span><br><span class="line">1246</span><br><span class="line">1247</span><br><span class="line">1248</span><br><span class="line">1249</span><br><span class="line">1250</span><br><span class="line">1251</span><br><span class="line">1252</span><br><span class="line">1253</span><br><span class="line">1254</span><br><span class="line">1255</span><br><span class="line">1256</span><br><span class="line">1257</span><br><span class="line">1258</span><br><span class="line">1259</span><br><span class="line">1260</span><br><span class="line">1261</span><br><span class="line">1262</span><br><span class="line">1263</span><br><span class="line">1264</span><br><span class="line">1265</span><br><span class="line">1266</span><br><span class="line">1267</span><br><span class="line">1268</span><br><span class="line">1269</span><br><span class="line">1270</span><br><span class="line">1271</span><br><span class="line">1272</span><br><span class="line">1273</span><br><span class="line">1274</span><br><span class="line">1275</span><br><span class="line">1276</span><br><span class="line">1277</span><br><span class="line">1278</span><br><span class="line">1279</span><br><span class="line">1280</span><br><span class="line">1281</span><br><span class="line">1282</span><br><span class="line">1283</span><br><span class="line">1284</span><br><span class="line">1285</span><br><span class="line">1286</span><br><span class="line">1287</span><br><span class="line">1288</span><br><span class="line">1289</span><br><span class="line">1290</span><br><span class="line">1291</span><br><span class="line">1292</span><br><span class="line">1293</span><br><span class="line">1294</span><br><span class="line">1295</span><br><span class="line">1296</span><br><span class="line">1297</span><br><span class="line">1298</span><br><span class="line">1299</span><br><span class="line">1300</span><br><span class="line">1301</span><br><span class="line">1302</span><br><span class="line">1303</span><br><span class="line">1304</span><br><span class="line">1305</span><br><span class="line">1306</span><br><span class="line">1307</span><br><span class="line">1308</span><br><span class="line">1309</span><br><span class="line">1310</span><br><span class="line">1311</span><br><span class="line">1312</span><br><span class="line">1313</span><br><span class="line">1314</span><br><span class="line">1315</span><br><span class="line">1316</span><br><span class="line">1317</span><br><span class="line">1318</span><br><span class="line">1319</span><br><span class="line">1320</span><br><span class="line">1321</span><br><span class="line">1322</span><br><span class="line">1323</span><br><span class="line">1324</span><br><span class="line">1325</span><br><span class="line">1326</span><br><span class="line">1327</span><br><span class="line">1328</span><br><span class="line">1329</span><br><span class="line">1330</span><br><span class="line">1331</span><br><span class="line">1332</span><br><span class="line">1333</span><br><span class="line">1334</span><br><span class="line">1335</span><br><span class="line">1336</span><br><span class="line">1337</span><br><span class="line">1338</span><br><span class="line">1339</span><br><span class="line">1340</span><br><span class="line">1341</span><br><span class="line">1342</span><br><span class="line">1343</span><br><span class="line">1344</span><br><span class="line">1345</span><br><span class="line">1346</span><br><span class="line">1347</span><br><span class="line">1348</span><br><span class="line">1349</span><br><span class="line">1350</span><br><span class="line">1351</span><br><span class="line">1352</span><br><span class="line">1353</span><br><span class="line">1354</span><br><span class="line">1355</span><br><span class="line">1356</span><br><span class="line">1357</span><br><span class="line">1358</span><br><span class="line">1359</span><br><span class="line">1360</span><br><span class="line">1361</span><br><span class="line">1362</span><br><span class="line">1363</span><br><span class="line">1364</span><br><span class="line">1365</span><br><span class="line">1366</span><br><span class="line">1367</span><br><span class="line">1368</span><br><span class="line">1369</span><br><span class="line">1370</span><br><span class="line">1371</span><br><span class="line">1372</span><br><span class="line">1373</span><br><span class="line">1374</span><br><span class="line">1375</span><br><span class="line">1376</span><br><span class="line">1377</span><br><span class="line">1378</span><br><span class="line">1379</span><br><span class="line">1380</span><br><span class="line">1381</span><br><span class="line">1382</span><br><span class="line">1383</span><br><span class="line">1384</span><br><span class="line">1385</span><br><span class="line">1386</span><br><span class="line">1387</span><br><span class="line">1388</span><br><span class="line">1389</span><br><span class="line">1390</span><br><span class="line">1391</span><br><span class="line">1392</span><br><span class="line">1393</span><br><span class="line">1394</span><br><span class="line">1395</span><br><span class="line">1396</span><br><span class="line">1397</span><br><span class="line">1398</span><br><span class="line">1399</span><br><span class="line">1400</span><br><span class="line">1401</span><br><span class="line">1402</span><br><span class="line">1403</span><br><span class="line">1404</span><br><span class="line">1405</span><br><span class="line">1406</span><br><span class="line">1407</span><br><span class="line">1408</span><br><span class="line">1409</span><br><span class="line">1410</span><br><span class="line">1411</span><br><span class="line">1412</span><br><span class="line">1413</span><br><span class="line">1414</span><br><span class="line">1415</span><br><span class="line">1416</span><br><span class="line">1417</span><br><span class="line">1418</span><br><span class="line">1419</span><br><span class="line">1420</span><br><span class="line">1421</span><br><span class="line">1422</span><br><span class="line">1423</span><br><span class="line">1424</span><br><span class="line">1425</span><br><span class="line">1426</span><br><span class="line">1427</span><br><span class="line">1428</span><br><span class="line">1429</span><br><span class="line">1430</span><br><span class="line">1431</span><br><span class="line">1432</span><br><span class="line">1433</span><br><span class="line">1434</span><br><span class="line">1435</span><br><span class="line">1436</span><br><span class="line">1437</span><br><span class="line">1438</span><br><span class="line">1439</span><br><span class="line">1440</span><br><span class="line">1441</span><br><span class="line">1442</span><br><span class="line">1443</span><br><span class="line">1444</span><br><span class="line">1445</span><br><span class="line">1446</span><br><span class="line">1447</span><br><span class="line">1448</span><br><span class="line">1449</span><br><span class="line">1450</span><br><span class="line">1451</span><br><span class="line">1452</span><br><span class="line">1453</span><br><span class="line">1454</span><br><span class="line">1455</span><br><span class="line">1456</span><br><span class="line">1457</span><br><span class="line">1458</span><br><span class="line">1459</span><br><span class="line">1460</span><br><span class="line">1461</span><br><span class="line">1462</span><br><span class="line">1463</span><br><span class="line">1464</span><br><span class="line">1465</span><br><span class="line">1466</span><br><span class="line">1467</span><br><span class="line">1468</span><br><span class="line">1469</span><br><span class="line">1470</span><br><span class="line">1471</span><br><span class="line">1472</span><br><span class="line">1473</span><br><span class="line">1474</span><br><span class="line">1475</span><br><span class="line">1476</span><br><span class="line">1477</span><br><span class="line">1478</span><br><span class="line">1479</span><br><span class="line">1480</span><br><span class="line">1481</span><br><span class="line">1482</span><br><span class="line">1483</span><br><span class="line">1484</span><br><span class="line">1485</span><br><span class="line">1486</span><br><span class="line">1487</span><br><span class="line">1488</span><br><span class="line">1489</span><br><span class="line">1490</span><br><span class="line">1491</span><br><span class="line">1492</span><br><span class="line">1493</span><br><span class="line">1494</span><br><span class="line">1495</span><br><span class="line">1496</span><br><span class="line">1497</span><br><span class="line">1498</span><br><span class="line">1499</span><br><span class="line">1500</span><br><span class="line">1501</span><br><span class="line">1502</span><br><span class="line">1503</span><br><span class="line">1504</span><br><span class="line">1505</span><br><span class="line">1506</span><br><span class="line">1507</span><br><span class="line">1508</span><br><span class="line">1509</span><br><span class="line">1510</span><br><span class="line">1511</span><br><span class="line">1512</span><br><span class="line">1513</span><br><span class="line">1514</span><br><span class="line">1515</span><br><span class="line">1516</span><br><span class="line">1517</span><br><span class="line">1518</span><br><span class="line">1519</span><br><span class="line">1520</span><br><span class="line">1521</span><br><span class="line">1522</span><br><span class="line">1523</span><br><span class="line">1524</span><br><span class="line">1525</span><br><span class="line">1526</span><br><span class="line">1527</span><br><span class="line">1528</span><br><span class="line">1529</span><br><span class="line">1530</span><br><span class="line">1531</span><br><span class="line">1532</span><br><span class="line">1533</span><br><span class="line">1534</span><br><span class="line">1535</span><br><span class="line">1536</span><br><span class="line">1537</span><br><span class="line">1538</span><br><span class="line">1539</span><br><span class="line">1540</span><br><span class="line">1541</span><br><span class="line">1542</span><br><span class="line">1543</span><br><span class="line">1544</span><br><span class="line">1545</span><br><span class="line">1546</span><br><span class="line">1547</span><br><span class="line">1548</span><br><span class="line">1549</span><br><span class="line">1550</span><br><span class="line">1551</span><br><span class="line">1552</span><br><span class="line">1553</span><br><span class="line">1554</span><br><span class="line">1555</span><br><span class="line">1556</span><br><span class="line">1557</span><br><span class="line">1558</span><br><span class="line">1559</span><br><span class="line">1560</span><br><span class="line">1561</span><br><span class="line">1562</span><br><span class="line">1563</span><br><span class="line">1564</span><br><span class="line">1565</span><br><span class="line">1566</span><br><span class="line">1567</span><br><span class="line">1568</span><br><span class="line">1569</span><br><span class="line">1570</span><br><span class="line">1571</span><br><span class="line">1572</span><br><span class="line">1573</span><br><span class="line">1574</span><br><span class="line">1575</span><br><span class="line">1576</span><br><span class="line">1577</span><br><span class="line">1578</span><br><span class="line">1579</span><br><span class="line">1580</span><br><span class="line">1581</span><br><span class="line">1582</span><br><span class="line">1583</span><br><span class="line">1584</span><br><span class="line">1585</span><br><span class="line">1586</span><br><span class="line">1587</span><br><span class="line">1588</span><br><span class="line">1589</span><br><span class="line">1590</span><br><span class="line">1591</span><br><span class="line">1592</span><br><span class="line">1593</span><br><span class="line">1594</span><br><span class="line">1595</span><br><span class="line">1596</span><br><span class="line">1597</span><br><span class="line">1598</span><br><span class="line">1599</span><br><span class="line">1600</span><br><span class="line">1601</span><br><span class="line">1602</span><br><span class="line">1603</span><br><span class="line">1604</span><br><span class="line">1605</span><br><span class="line">1606</span><br><span class="line">1607</span><br><span class="line">1608</span><br><span class="line">1609</span><br><span class="line">1610</span><br><span class="line">1611</span><br><span class="line">1612</span><br><span class="line">1613</span><br><span class="line">1614</span><br><span class="line">1615</span><br><span class="line">1616</span><br><span class="line">1617</span><br><span class="line">1618</span><br><span class="line">1619</span><br><span class="line">1620</span><br><span class="line">1621</span><br><span class="line">1622</span><br><span class="line">1623</span><br><span class="line">1624</span><br><span class="line">1625</span><br><span class="line">1626</span><br><span class="line">1627</span><br><span class="line">1628</span><br><span class="line">1629</span><br><span class="line">1630</span><br><span class="line">1631</span><br><span class="line">1632</span><br><span class="line">1633</span><br><span class="line">1634</span><br><span class="line">1635</span><br><span class="line">1636</span><br><span class="line">1637</span><br><span class="line">1638</span><br><span class="line">1639</span><br><span class="line">1640</span><br><span class="line">1641</span><br><span class="line">1642</span><br><span class="line">1643</span><br><span class="line">1644</span><br><span class="line">1645</span><br><span class="line">1646</span><br><span class="line">1647</span><br><span class="line">1648</span><br><span class="line">1649</span><br><span class="line">1650</span><br><span class="line">1651</span><br><span class="line">1652</span><br><span class="line">1653</span><br><span class="line">1654</span><br><span class="line">1655</span><br><span class="line">1656</span><br><span class="line">1657</span><br><span class="line">1658</span><br><span class="line">1659</span><br><span class="line">1660</span><br><span class="line">1661</span><br><span class="line">1662</span><br><span class="line">1663</span><br><span class="line">1664</span><br><span class="line">1665</span><br><span class="line">1666</span><br><span class="line">1667</span><br><span class="line">1668</span><br><span class="line">1669</span><br><span class="line">1670</span><br><span class="line">1671</span><br><span class="line">1672</span><br><span class="line">1673</span><br><span class="line">1674</span><br><span class="line">1675</span><br><span class="line">1676</span><br><span class="line">1677</span><br><span class="line">1678</span><br><span class="line">1679</span><br><span class="line">1680</span><br><span class="line">1681</span><br><span class="line">1682</span><br><span class="line">1683</span><br><span class="line">1684</span><br><span class="line">1685</span><br><span class="line">1686</span><br><span class="line">1687</span><br><span class="line">1688</span><br><span class="line">1689</span><br><span class="line">1690</span><br><span class="line">1691</span><br><span class="line">1692</span><br><span class="line">1693</span><br><span class="line">1694</span><br><span class="line">1695</span><br><span class="line">1696</span><br><span class="line">1697</span><br><span class="line">1698</span><br><span class="line">1699</span><br><span class="line">1700</span><br><span class="line">1701</span><br><span class="line">1702</span><br><span class="line">1703</span><br><span class="line">1704</span><br><span class="line">1705</span><br><span class="line">1706</span><br><span class="line">1707</span><br><span class="line">1708</span><br><span class="line">1709</span><br><span class="line">1710</span><br><span class="line">1711</span><br><span class="line">1712</span><br><span class="line">1713</span><br><span class="line">1714</span><br><span class="line">1715</span><br><span class="line">1716</span><br><span class="line">1717</span><br><span class="line">1718</span><br><span class="line">1719</span><br><span class="line">1720</span><br><span class="line">1721</span><br><span class="line">1722</span><br><span class="line">1723</span><br><span class="line">1724</span><br><span class="line">1725</span><br><span class="line">1726</span><br><span class="line">1727</span><br><span class="line">1728</span><br><span class="line">1729</span><br><span class="line">1730</span><br><span class="line">1731</span><br><span class="line">1732</span><br><span class="line">1733</span><br><span class="line">1734</span><br><span class="line">1735</span><br><span class="line">1736</span><br><span class="line">1737</span><br><span class="line">1738</span><br><span class="line">1739</span><br><span class="line">1740</span><br><span class="line">1741</span><br><span class="line">1742</span><br><span class="line">1743</span><br><span class="line">1744</span><br><span class="line">1745</span><br><span class="line">1746</span><br><span class="line">1747</span><br><span class="line">1748</span><br><span class="line">1749</span><br><span class="line">1750</span><br><span class="line">1751</span><br><span class="line">1752</span><br><span class="line">1753</span><br><span class="line">1754</span><br><span class="line">1755</span><br><span class="line">1756</span><br><span class="line">1757</span><br><span class="line">1758</span><br><span class="line">1759</span><br><span class="line">1760</span><br><span class="line">1761</span><br><span class="line">1762</span><br><span class="line">1763</span><br><span class="line">1764</span><br><span class="line">1765</span><br><span class="line">1766</span><br><span class="line">1767</span><br><span class="line">1768</span><br><span class="line">1769</span><br><span class="line">1770</span><br><span class="line">1771</span><br><span class="line">1772</span><br><span class="line">1773</span><br></pre></td><td class="code"><pre><code class="hljs mathematica">利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个<br>回顾。昨天是<span class="hljs-variable">GCJ2006</span> 的回忆，今天时间上更早一些吧，我现在还清晰记得<span class="hljs-number">3</span> 年<br>前，我刚刚参加<span class="hljs-variable">ACM</span> 时参加北京赛区<span class="hljs-number">2005</span> 和杭州赛区<span class="hljs-number">2005</span> 的情况。<br><span class="hljs-number">2005</span> 年<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span>——酸甜苦辣<br>我进入清华大学开始本科学习的时间是<span class="hljs-number">2004</span> 年<span class="hljs-number">8</span> 月，在进入清华大学的第一<br>年里，由于基础课学习比较紧张，再加上计算机系不允许大一学生自带电脑，我没<br>有参加<span class="hljs-number">2004</span> 年的<span class="hljs-variable">ACM</span> 比赛。不过在大一一年中没有停止这方面的练习，对<span class="hljs-variable">ACM</span><br>还是热情高涨。<br>大概在<span class="hljs-number">2005</span> 年<span class="hljs-number">7</span> 月底，与同班同学<span class="hljs-variable">shell</span>（贝小辉）和<span class="hljs-variable">superzn</span>（张宁）一起<br>决定组队参加<span class="hljs-variable">ACM</span> 比赛。对于队名没有太多的想法，就随便取了一个字典序靠前<br>一点的<span class="hljs-variable">bomber</span>。随后进行的几场训练中，我的编程状态一直保持得很好，训练比<br>赛的主要方式都是：我主写程序，<span class="hljs-variable">shell</span> 和<span class="hljs-variable">superzn</span> 负责翻译题目，思考算法和测试。<br>这种组队模式一直沿用到我们后面的所有比赛中。<br><span class="hljs-number">2005</span> 年底，我们报名参加了<span class="hljs-number">2005</span> 年的北京赛区和杭州赛区的比赛。顺利通过<br>了预赛进入了现场决赛。记得当时北京赛区预赛的时候，我和<span class="hljs-variable">superzn</span> 一起在参加<br>百度之星程序设计大赛，<span class="hljs-variable">shell</span> 依靠一人之力过了<span class="hljs-number">6</span> 题，最后以第二名的资格参加<br>北京赛区现场比赛。<br>北京赛区：<br><span class="hljs-number">2005</span> 年的北京赛区地点设在隔壁的北京大学，由于交通非常方便，我们没有<br>和大部分选手住在一起，不过也没有参加<span class="hljs-variable">Java</span><span class="hljs-operator">-</span><span class="hljs-variable">Challenge</span> 和晚上的表演。<br>练习赛之前，说到比赛位置抽签，本身意义不是很大，可是邬老师神奇的<span class="hljs-variable">RP</span><br>把两只清华的队伍抽在一起，结果练习赛进行了一半，另一只清华的队伍<span class="hljs-variable">THU1</span><br>（队员是：吴景岳，栗师和金凯，好像后来队名改成了<span class="hljs-variable">DreamCatcher</span>，不是很确<br>定）被要求换到一个比较远的地方，理由是有些学校觉得这样不合理。后来很多赛<br>区也出现过队伍座位在一起的情况，邬老师的<span class="hljs-variable">RP</span> 果然不是盖的。<br>记得练习赛时和复旦的<span class="hljs-variable">LemonTree</span>（盛城）一起在场地里闲逛，结果果然不到<br><span class="hljs-number">10</span> 分钟就被要求回座位了。还有当时比赛场地是一个体育馆，有些队伍把气球放<br>飞之后气球就飘在天花板下了，总裁判李文新老师还威胁我们说，如果明天正式比<br>赛把气球放飞，就不算通过相应的题目，除非有办法把气球取下来。<br>然后就是比赛的过程了，下面有底纹的文字是我找到的当时留下的比赛总结：<br><span class="hljs-built_in">E</span>：快速排序。<span class="hljs-number">5</span> 分钟<span class="hljs-number">1</span><span class="hljs-variable">Y</span>。<br>我想<span class="hljs-number">5</span> 分钟的时间可以争取这几年<span class="hljs-variable">ACM</span> 国内赛区的最快出题记录了吧。<br><span class="hljs-variable">G</span>：二分答案<span class="hljs-operator">+</span>最小生成树。<span class="hljs-number">25</span> 分钟<span class="hljs-number">1</span><span class="hljs-variable">Y</span>。<br>这题就是经典的最优比例生成树问题，我们一致认为这题比较简单。不过后来<br>被李文新老师批评了，说法是误导其他的队伍。不过说到最优比例生成树问题，<br><span class="hljs-variable">TCO2006</span> 的时候<span class="hljs-variable">fwj</span> 和<span class="hljs-variable">tomek</span> 竟然都没有见过这道题目，这题可是源于<span class="hljs-variable">POI</span> 呀。我<br>想我们认为这道题目简单的主要原因是我们都在冬令营上见过这到题目，如果第一<br>次看见，想出算法可能确实需要一些时间。在这里向被我们影响的队伍的道歉，最<br>终<span class="hljs-variable">G</span> 提交了<span class="hljs-number">200</span> 多次，但是只有<span class="hljs-number">8</span> 个队伍<span class="hljs-variable">AC</span>。<br><span class="hljs-built_in">C</span>：二分图最大匹配。<span class="hljs-number">42</span> 分钟<span class="hljs-number">1</span><span class="hljs-variable">Y</span><br>题目要求计算一张图的最小覆盖集，可能唯一的<span class="hljs-variable">tricky</span> 是发现图是二分图。<br><span class="hljs-built_in">D</span>：遇到了一定的困难，发现<span class="hljs-variable">A</span> 很简单，于是先放一下<br><span class="hljs-built_in">D</span> 是一道比较综合的题目，设计一些简单的计算几何和字符串处理的知识。<br><span class="hljs-variable">A</span>：简单的几何问题，出现了一个低级错误，提交了<span class="hljs-number">3</span> 次均为<span class="hljs-variable">WA</span>。<br><span class="hljs-variable">A</span> 是北京赛区最简单的题目，我的程序里犯了一个很低级的错误，可能也是经<br>验不足造成的吧。<br><span class="hljs-built_in">D</span>：重新写，但是没有考虑一种情况，<span class="hljs-variable">WA</span> 了<span class="hljs-number">1</span> 次。<br><span class="hljs-number">87</span> 分钟，复旦的<span class="hljs-variable">Abuacus</span> 过了<span class="hljs-number">4</span> 题占据了<span class="hljs-variable">Rank1</span>。由于队伍模式的原因，我们<br>在还有很多简单题目的情况下卡住了长达<span class="hljs-number">30</span> 分钟。<br><span class="hljs-variable">A</span>：<span class="hljs-variable">shell</span> 突然发现了<span class="hljs-variable">A</span> 程序中的低级错误，<span class="hljs-number">105</span> 分钟<span class="hljs-variable">AC</span>，重新夺回<span class="hljs-variable">Rank1</span>。<br>这是很重要的一步，现在想来如果没有这个发现，后果可能不堪设想。<br><span class="hljs-variable">B</span>：二分答案<span class="hljs-operator">+</span><span class="hljs-number">2</span><span class="hljs-variable">SAT</span>。<span class="hljs-number">129</span> 分钟<span class="hljs-variable">AC</span>。<br><span class="hljs-variable">B</span> 是一道明显的<span class="hljs-number">2</span><span class="hljs-variable">SAT</span> 问题，由于题目比较长，我们没有很早发现这道简单题。<br><span class="hljs-built_in">D</span>：发现了<span class="hljs-built_in">D</span> 的没有考虑的情况，<span class="hljs-number">140</span> 分钟<span class="hljs-variable">AC</span>。<br>看了一个<span class="hljs-variable">board</span>，那时<span class="hljs-variable">Abuacus</span>，<span class="hljs-variable">Eccentric</span> 都只有<span class="hljs-number">4</span> 题，能够在第一次参加正<br>式比赛就做到<span class="hljs-number">6</span><span class="hljs-operator">-</span><span class="hljs-number">4</span> 的领先，当时心情很激动，不过由于缺少经验，也影响了接下来<br>的发挥。其实，现在回想起来，这次比赛其实是一个很好的<span class="hljs-variable">AK</span> 的机会。<br><span class="hljs-variable">F</span>：<span class="hljs-variable">DP</span>。程序比较复杂，<span class="hljs-variable">WA</span> 了<span class="hljs-number">4</span> 次。<br><span class="hljs-variable">F</span> 是一道比较复杂的动态规划的题目，其实<span class="hljs-variable">WA</span> 的原因是一个应该用<span class="hljs-variable">int64</span> 的<br>地方，我们使用了<span class="hljs-variable">int</span>，这个地方的确很难发现。<br><span class="hljs-variable">H</span>：<span class="hljs-variable">F</span> 一时无法<span class="hljs-variable">AC</span>，只好转功<span class="hljs-variable">H</span>。<span class="hljs-variable">H</span> 就是普通的模拟题。开始没有考虑坦克和<br>炮弹可能在<span class="hljs-number">1</span><span class="hljs-operator">/</span><span class="hljs-number">3</span> 秒相遇，<span class="hljs-variable">WA</span> 了<span class="hljs-number">1</span> 次。<br>比赛还有一个小时，封板。<br><span class="hljs-variable">H</span>：<span class="hljs-variable">shell</span> 发现了坦克和炮弹可能在<span class="hljs-number">1</span><span class="hljs-operator">/</span><span class="hljs-number">3</span> 秒相遇的情况，<span class="hljs-number">250</span> 分钟左右<span class="hljs-variable">AC</span>。<br>对于我们这种组队模式，当主写程序的选手状态不好的时候，很容易出现连续<br>卡题的情况，这种情况的出现很不利于水平的正常发挥。在北京赛区的比赛中，我<br>们很有幸没有出现连续卡处的情况。<br>记得，当时北京赛区的<span class="hljs-variable">Judge</span> 的半自动的，就是说如果结果是<span class="hljs-variable">AC</span>，速度就会非<br>常快，否则由于人的介入，不能<span class="hljs-variable">AC</span> 的提交往往需要等一段时间。我们第<span class="hljs-number">2</span> 次提交<br><span class="hljs-variable">H</span> 之后，没有得到很快的回复，以为已经<span class="hljs-variable">WA</span> 了，于是我和<span class="hljs-variable">superzn</span> 继续测试一些<br>数据。但此时，突然有一个<span class="hljs-variable">mm</span> 从左边走过来插气球，这个气球也成为了全场唯<br>一的蓝色气球，这个意外之喜最后成就了第一个分区赛冠军。<br><span class="hljs-variable">F</span>：下面就是痛苦地提交<span class="hljs-variable">F</span>，一直战斗到最后一刻，<span class="hljs-variable">WA</span> 了<span class="hljs-number">14</span> 次，留下了北京<br>赛区最大的遗憾。<br>在最后时刻我们似乎发现了那个<span class="hljs-variable">int64</span> 的错误，不过当时思路已经比较混乱了，<br>没能改对。<span class="hljs-variable">F</span> 的问题也导致没有时间写<span class="hljs-built_in">I</span>，当时如果直接重写后者换<span class="hljs-variable">superzn</span> 来写<span class="hljs-variable">F</span>，<br>完全可以在比赛结束前<span class="hljs-variable">AC</span>。<br>比赛的大致过程如上所述，那个神奇的气球，我现在仍然记忆犹新。最终有<span class="hljs-number">4</span><br>个队伍攻破<span class="hljs-number">7</span> 题，<span class="hljs-variable">Abacus</span> 的组成应该是盛城，<span class="hljs-variable">timegreen</span> 和<span class="hljs-variable">suzhan</span> 吧，<span class="hljs-variable">Eccentric</span> 中<br>我只记得辛韬，<span class="hljs-type">ZSU_Panku</span> 中我记得<span class="hljs-variable">Savior</span>（陈实）。上述的老朋友之后见面的机<br>会就很少了，分区比赛也成为了我好需要老同学重要的交流机会了。<br>我<span class="hljs-variable">ACRush</span> 的<span class="hljs-variable">ID</span> 估计就是那时开始使用的吧，转眼就已经<span class="hljs-number">3</span> 年多了。<br>比赛前后还记得经常与复旦大学的吴永辉老师聊天，在那之后的每次比赛我都<br>能见到他年轻的身影。<br>现在回想起北京的分区赛，很有幸能够在第一次参加<span class="hljs-variable">ACM</span> 正式比赛就获得分<br>区比赛的冠军。我想是由于现场气氛对许多队伍都有不小的影响吧，当时许多队伍<br>都卡在几道比较繁琐的题目上了，题目的算法性都不是很强。我大概从那时才刚刚<br>接触<span class="hljs-variable">TopCoder</span>，如果能够早一些，相信会更适应这样的比赛。<br>杭州赛区：<br><span class="hljs-number">2005</span> 年的<span class="hljs-variable">ACM</span> 杭州赛区比赛在浙江大学举行，杭州赛区的时间就在北京赛区<br>结束后一周，最初选择杭州赛区的原因很飘逸：我自己家在杭州。实际上也差不多，<br>我随队伍（当时<span class="hljs-variable">THU</span> 派了<span class="hljs-number">3</span> 只队伍参加杭州赛区的比赛，除了我们队之外，<br><span class="hljs-variable">b142857</span>（侯启明），<span class="hljs-variable">zhy</span>（周源），<span class="hljs-variable">ysy</span>（杨 思雨）组队，另外一只由汪汀，王俊<br>和黄源河组成）一同抵达杭州车站之后就马上回家休息了，直到比赛前才赶回。在<br>北京到杭州赛区之间的一周中，我的状态就在 不断下滑，在家中完全失去了比赛<br>的气氛，回到赛场再也找不到感觉了。一场悲剧即将上演。我们先看看比赛过程吧，<br>下面有底纹的文字是我找到的当时留下的比赛 总结：<br><span class="hljs-variable">G</span>：初看很简单，但是调试了<span class="hljs-number">30</span> 分钟没有结果。<br><span class="hljs-variable">G</span> 是一道数学问题，其实《具体数学》书上有明确的公式，不过我们使用的递<br>推方法应该也可以得到正确的结果。程序中犯了一些低级的错误，由于实在不在状<br>态，调试了<span class="hljs-number">30</span> 分钟还没有找到错误。这里还暴露了一个组队模式的问题，在后来<br>的组队模式中，如果像这样没有想清楚算法的题目队友是一定不允许我去写的。<br><span class="hljs-variable">A</span>：模拟。<span class="hljs-number">41</span> 分钟<span class="hljs-variable">AC</span>，当时肯定没有想到这是唯一一道<span class="hljs-number">1</span><span class="hljs-variable">Y</span> 的题目。<br><span class="hljs-variable">A</span> 是一道模拟题，<span class="hljs-number">1</span><span class="hljs-variable">Y</span> 的时候已经很晚了，排名也很靠后。<br><span class="hljs-built_in">C</span>：图论。但是由于堆栈逸出<span class="hljs-variable">RTE</span> 了<span class="hljs-number">5</span> 次，浪费了大量的时间。<br><span class="hljs-built_in">C</span> 的问题关于树中祖先关心的判定，题目很简单，实现的方法也很容易，就是<br>通过一遍<span class="hljs-variable">DFS</span> 来计算。但是我们忽视了一个从来没有遇到过的问题：堆栈溢出。<br>而且，堆栈在本地机器上运行过程中，<span class="hljs-variable">Eclipse</span> 提供了<span class="hljs-number">8</span><span class="hljs-variable">MB</span> 左右的堆栈，所以没有<br>溢出，但是在提交之后的环境下运行就溢出了。而且每次<span class="hljs-variable">RTE</span> 之后，我们一直在<br>尝试修改数组的大小，一直没有找到根本原因。调试<span class="hljs-built_in">C</span> 的同时，我也尝试修改<span class="hljs-variable">G</span>，<br>结果<span class="hljs-variable">G</span> 也错了<span class="hljs-number">8</span> 次之多，并且始终都是<span class="hljs-variable">WA</span>。<br><span class="hljs-built_in">I</span>：<span class="hljs-variable">shell</span> 在我郁闷地调试<span class="hljs-built_in">C</span> 和<span class="hljs-variable">G</span> 中<span class="hljs-variable">AC</span> 了，之前<span class="hljs-variable">WA</span> 了一次。<br><span class="hljs-built_in">I</span> 是动态规划问题，<span class="hljs-variable">WA</span> 一次可能是忽视了一些边界情况。<br><span class="hljs-built_in">D</span>：网络流，没有想到先贪心进行优化。<span class="hljs-variable">TLE</span> 了<span class="hljs-number">5</span> 次最终没有通过。<br><span class="hljs-built_in">D</span> 就是计算最小割，我们事先准备了先流推进算法，不过根据这道题目的模型，<br>先流推进算法遇到最坏情况：二分图。由于当时<span class="hljs-variable">dinic</span> 还不是很流行，我们<span class="hljs-variable">TLE</span> 了<br><span class="hljs-number">5</span> 次还没有通过。<br>郁闷地调试<span class="hljs-built_in">D</span> 和<span class="hljs-variable">G</span>。<br><span class="hljs-built_in">E</span><span class="hljs-operator">,</span><span class="hljs-variable">B</span>：都尝试过，但是都出现了不明的问题。<br>在随后的时间里，不断调试<span class="hljs-built_in">D</span> 和<span class="hljs-variable">G</span>，但是始终不能<span class="hljs-variable">AC</span>。之后又尝试<span class="hljs-built_in">E</span> 和<span class="hljs-variable">B</span>，<span class="hljs-built_in">E</span><br>通过分段的方法可以处理，<span class="hljs-variable">B</span> 是数学题目。正常的话<span class="hljs-built_in">E</span> 和<span class="hljs-variable">B</span> 并不是很困难的题目，<br>但是当时已经非常混乱，连样例都没有通过。<br>最终我们只过了<span class="hljs-number">3</span> 题，排在<span class="hljs-number">21</span> 名，经历了我参加<span class="hljs-variable">ACM</span> 以来最惨痛的失败。<br>这次失败主要归过与我状态太差，基本上什么题目都不能顺利通过。当然题目的选<br>择也有很大的问题：<span class="hljs-variable">G</span> 确实不是难题，但是由于未知的原因始终不能通过，后来我<br>把纸上的程序敲在<span class="hljs-variable">ZJU</span> 上就<span class="hljs-variable">AC</span> 了，至于现场为什么不能<span class="hljs-variable">AC</span> 我现在还是不能明白。<br>如果说第一题的选择直接影响了我们的信心，那么<span class="hljs-built_in">D</span> 的堆栈溢出则完全打乱了我<br>们的节奏。对于我们的组队模式，卡出<span class="hljs-number">2</span> 题已经超出了极限，我们不可能再尝试<br>其他题目。<br><span class="hljs-variable">Abacus</span> 也来到了杭州，他们前期体现了强劲的先期优势，在<span class="hljs-number">2</span> 小时就达到了<span class="hljs-number">6</span><br>题；<span class="hljs-variable">b142857</span>（侯启明），<span class="hljs-variable">zhy</span>（周源），<span class="hljs-variable">ysy</span>（杨思雨）的队伍表现得相当神勇，<br>在最后一小时超越了<span class="hljs-variable">Abacus</span>，夺得了冠军。<br>杭州赛区的失败至今仍是心中痛苦的回忆，不过这个教训也是对我今后的学<br>习生活的一种警示。<br>总结：<br><span class="hljs-number">2005</span> 年是我第一年参加<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 的比赛，两场<span class="hljs-variable">ACM</span> 分区赛，我们经历了夺<br>冠的兴奋，也经历了环顾四周等待比赛结束的无奈。<span class="hljs-number">2004</span> 年清华没有获得任何分<br>区赛的冠军，<span class="hljs-number">2005</span> 年清华打了个漂亮的翻身仗，先后在成都，北京和杭州夺得冠<br>军，而且是三支不同的队伍。<br>两个赛区的<span class="hljs-variable">G</span> 都是有传奇色彩的题目。北京赛区中，我们<span class="hljs-number">25</span> 分钟<span class="hljs-number">1</span><span class="hljs-variable">Y</span> 了<span class="hljs-variable">G</span>，<br>导致许多队伍跟风失败，最终达到了<span class="hljs-number">208</span> 提交<span class="hljs-number">8</span><span class="hljs-variable">AC</span> 的低通过率。但是，杭州赛区<br>中，<span class="hljs-variable">G</span> 从比赛一开始就占用了我们大量的时间，直到最后都没有通过，估计至少浪<br>费了两个小时左右。真所谓成也在<span class="hljs-variable">G</span>，败也在<span class="hljs-variable">G</span>。<br>北京赛区后，<span class="hljs-variable">POJ</span> 的论坛上传闻说我曾经说过“起身去厕所，不许碰键<br>盘。。。”，很敬仰那些同学搞笑和扯淡的功底，我们虽然定下了以我主写程序的<br>组队模式，但是也非常重视配合和每个人在队伍中的重要作用。<br>当时清华没有组织校内<span class="hljs-variable">PK</span> 选拔，选择了成都赛区的冠军队<span class="hljs-variable">THU1</span> 参加全球总<br>决赛，当时总决赛队伍是以参考第二赛区的成绩决定的，现在回想起来也是很合理<br>的。由于最终我们未能得到机会参加全球总决赛，接下来几个月我们情绪低落，<br><span class="hljs-variable">bomber</span> 从那时也就宣布解散了吧。<br><span class="hljs-number">2005</span> 年的比赛过程中，我见到了许许多多的老朋友。用吴永辉老师的话，<br><span class="hljs-variable">ACM</span> 竞赛可以看作一些老朋友一起进行的一场智力游戏。<br>附北京赛区前<span class="hljs-number">5</span> 名：<br><span class="hljs-number">1</span> <span class="hljs-variable">Tsinghua</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">bomber</span> <span class="hljs-built_in">First</span> <span class="hljs-variable">Place</span> <span class="hljs-number">7</span> <span class="hljs-number">788</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Fudan</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Abacus</span> <span class="hljs-variable">Second</span> <span class="hljs-variable">Place</span> <span class="hljs-number">7</span> <span class="hljs-number">983</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Shanghai</span> <span class="hljs-variable">Jiao</span> <span class="hljs-variable">Tong</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Eccentric</span> <span class="hljs-variable">Second</span> <span class="hljs-variable">Place</span> <span class="hljs-number">7</span> <span class="hljs-number">1084</span><br><span class="hljs-number">3</span> <span class="hljs-variable">ZhongShan</span> <span class="hljs-punctuation">(</span><span class="hljs-variable">Sun</span> <span class="hljs-variable">Yat</span><span class="hljs-operator">-</span><span class="hljs-variable">sen</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-type">ZSU_Panku</span> <span class="hljs-variable">Third</span> <span class="hljs-variable">Place</span> <span class="hljs-number">7</span> <span class="hljs-number">1194</span><br><span class="hljs-number">4</span> <span class="hljs-variable">Peking</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Monkey</span> <span class="hljs-variable">King</span> <span class="hljs-variable">Fourth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">6</span> <span class="hljs-number">768</span><br>找不到杭州赛区的排名了，只发现了这个：<br><span class="hljs-number">21</span> <span class="hljs-variable">THU</span> <span class="hljs-operator">*</span><span class="hljs-variable">bomber3</span> <span class="hljs-number">501</span> <span class="hljs-number">1</span><span class="hljs-operator">/</span><span class="hljs-number">41</span> <span class="hljs-number">0</span><span class="hljs-operator">/--</span> <span class="hljs-number">6</span><span class="hljs-operator">/</span><span class="hljs-number">197</span> <span class="hljs-number">5</span><span class="hljs-operator">/--</span> <span class="hljs-number">0</span><span class="hljs-operator">/--</span> <span class="hljs-number">0</span><span class="hljs-operator">/--</span> <span class="hljs-number">8</span><span class="hljs-operator">/--</span> <span class="hljs-number">0</span><span class="hljs-operator">/--</span> <span class="hljs-number">2</span><span class="hljs-operator">/</span><span class="hljs-number">143</span> <span class="hljs-number">22</span><br>谢谢韩家龙同学的热心帮助，找到一个排名的链接是：<br><span class="hljs-variable">http</span><span class="hljs-operator">://</span><span class="hljs-variable">acm</span><span class="hljs-operator">.</span><span class="hljs-variable">zju</span><span class="hljs-operator">.</span><span class="hljs-variable">edu</span><span class="hljs-operator">.</span><span class="hljs-variable">cn</span><span class="hljs-operator">:</span><span class="hljs-number">8080</span><span class="hljs-operator">/</span><span class="hljs-variable">icpc2005</span><span class="hljs-operator">/</span><span class="hljs-variable">ranklist</span><span class="hljs-operator">/</span><span class="hljs-variable">index</span><span class="hljs-operator">.</span><span class="hljs-variable">html</span><br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个<br>回顾。<span class="hljs-variable">GCJ2006</span>，<span class="hljs-variable">ACM2005</span> 和<span class="hljs-variable">TCCC2006</span> 之后， <span class="hljs-number">2006</span> 年对于我来说是一个大丰收，<br>今天晚上先回顾<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 成立先期的事情吧，明天再总结惊心动魄的<span class="hljs-variable">ACM</span> 上<br>海<span class="hljs-number">2006</span> 和<span class="hljs-variable">ACM</span> 西安<span class="hljs-number">2006</span> 吧。<br><span class="hljs-number">2006</span> 年<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span><span class="hljs-punctuation">(</span>上<span class="hljs-punctuation">)</span>——<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 的成立初期<br>回忆到<span class="hljs-number">2005</span> 年清华没有组织校内<span class="hljs-variable">PK</span> 选拔，选择了成都赛区的冠军队<span class="hljs-variable">THU1</span> 参<br>加全球总决赛，<span class="hljs-variable">bomber</span> 从那时也就宣布解散了。<br>早在<span class="hljs-number">2006</span> 年初，<span class="hljs-variable">THU1</span> 准备参加<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> <span class="hljs-number">2006</span> 世界总决赛的训练时，我们的<br>队伍就已经成立了。队伍其他两名选手是一起参加<span class="hljs-variable">IOI2004</span> 的<span class="hljs-variable">geworm</span><span class="hljs-punctuation">(</span>鬲融<span class="hljs-punctuation">)</span>和<br><span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span><span class="hljs-punctuation">(</span>胡伟栋<span class="hljs-punctuation">)</span>。<br><span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 的组队比赛：<br>至于<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 的队名，我们是为了纪念<span class="hljs-number">2004</span> 年<span class="hljs-number">4</span> 名参加<span class="hljs-variable">IOI</span> 的选手第一<br>次合作的时候使用的帐号，如果回到<span class="hljs-number">2004</span> 年的<span class="hljs-variable">PKU</span> 月赛，也许可以看到<span class="hljs-variable">thmr3191</span><br>的身影，这个<span class="hljs-variable">ID</span> 最初是我们<span class="hljs-number">4</span> 人共同使用的。其中<span class="hljs-variable">thmr</span> 就是<span class="hljs-variable">Tsinghua</span> <span class="hljs-variable">Mobile</span><br><span class="hljs-variable">Robot</span> 的缩写。当然我们觉得<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 读起来也比较容易上口。<br><span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 成立之后做的第一件事情就是配合<span class="hljs-variable">THU1</span> 准备<span class="hljs-variable">World</span> <span class="hljs-variable">Final2006</span> 的<br>训练，先后模拟比赛了两次<span class="hljs-variable">Northeastern</span> <span class="hljs-variable">Europe</span><span class="hljs-punctuation">(</span><span class="hljs-variable">NEERC</span><span class="hljs-punctuation">)</span>的题目。这两次训练中，<br>我们队伍的主要模式都是：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">geworm</span> 全程负责读题，思考算法和出数据；<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 和我在比赛前<span class="hljs-number">2</span> 个小时一起攻简单的题目；<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> <span class="hljs-number">2</span> 小时后<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 就开始死磕难题，我主写程序一直到<span class="hljs-number">3</span> 个半小时左右，结<br>合<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 对难题的把握，大家开始合攻难题。<br>这种拖后中卫的打法，对于<span class="hljs-variable">NEERC</span> 的题目难度非常合适，两场比赛我们都做<br>到了<span class="hljs-variable">AK</span>（全过<span class="hljs-number">11</span> 题）。这种组队模式也一直沿用至总决赛。当时<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 的状态很<br>好，对于<span class="hljs-variable">NEERC</span> 的题目难度，我觉得世界上很难有队伍能够有信心做到<span class="hljs-variable">AK</span>。<br>队伍成立初期的顺利使我们更有信心，我们利用署假时间进行了一些必要的训<br>练以迎接<span class="hljs-number">2006</span> 年下半年的<span class="hljs-variable">ACM</span> 分区比赛。<br>北京赛区预赛——网络赛赛网络：<br><span class="hljs-number">2006</span> 下半年有<span class="hljs-number">3</span> 个国内赛区，包括北京，上海和西安，其中北京赛区最先举<br>行。<span class="hljs-number">2006</span> 年北京赛区的地点设在了清华大学，这也是我唯一一次参与组织<span class="hljs-variable">ACM</span> 分<br>区比赛的机会。<br><span class="hljs-number">10</span> 月 中旬举行了北京赛区网络预赛，网络预赛的参与者是所有报名参加北京<br>赛区的队伍，以决定哪些队伍拥有参加现场比赛的资格。那段时间，我们队伍主要<br>精力放在了 准备比赛上，我们都没有参与网络预赛的命题和测试平台工作。由于<br>清华距离上次承办分区比赛已经相隔很多时间，直接导致网络比赛过程中出现了严<br>重的网络问 题，在这里作为清华<span class="hljs-variable">ACM</span> 队的一员向受到影响的队伍道歉。<br>不 过，我也是作为“局外人”来了解这次网络阻塞的，因为我确实没有参加<br>任何与网络赛有关的活动。现在回想起来，我认为平台的稳定性是一个不可推卸的<br>原因，但 是主要应该归咎于题目描述和样例的设计，当然还有测试数据的错误。<br>设想这样一种情况，如果一个比赛过程中，从某一时刻起，突然增加<span class="hljs-number">1000</span> 个提交<br>需要<span class="hljs-variable">rejudge</span>，然后所有队伍还都在这一时刻起尝试提交，我想现有的大部分<span class="hljs-variable">OJ</span> 都<br>很难在<span class="hljs-number">1</span> 小时之内平息这些提交吧。再举一个更夸张的例子，如果<span class="hljs-variable">OJ</span> 准备的测试<br>机器的测试速度已经完全跟不上提交的速度，那么卡住是不可避免的。我们通过网<br>络预赛的教训总结出一些网络预赛题目的重要经验：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> 对于容易上手的题目，测试样例一定要足够强。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> 对于简单的题目，必须仔细确保测试数据是正确的。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> 题目描述必须没有任何歧义，避免选手通过提交来不断尝试各种理解。<br>如果题目能够很有效控制提交数目，对于测试系统的要求其实不是很高。例<br>如复活赛和现场决赛的时候，测试系统会大部分时间处在空闲阶段。反之，如果提<br>交处在上述病态的情况下，只有非常专业的测试系统才能胜任这样的挑战，当然不<br>包括我们的测试系统。<br>总之，对于网络问题我作为清华<span class="hljs-variable">ACM</span> 队的一员深表歉意，如果还有下一次的<br>机会，我们一定努力做得更好。<br>北京赛区验题赛：<br>如果说网络预赛过程中，网络出了一些问题，那么，决赛则是结果更出乎我<br>们的意料之外。在北京赛区现场赛之前几天，我们<span class="hljs-number">3</span> 支队伍进行了验题赛，比赛<br>虽然不正式，但是过程仍然很激烈。<br>先列一下决赛的<span class="hljs-number">9</span> 道题目吧：<br><span class="hljs-variable">A</span><span class="hljs-operator">.</span> <span class="hljs-variable">Robot</span><br><span class="hljs-variable">B</span><span class="hljs-operator">.</span> <span class="hljs-variable">Animal</span> <span class="hljs-built_in">Run</span><br><span class="hljs-built_in">C</span><span class="hljs-operator">.</span> <span class="hljs-variable">Another</span> <span class="hljs-variable">Minimum</span> <span class="hljs-variable">Spanning</span> <span class="hljs-built_in">Tree</span><br><span class="hljs-built_in">D</span><span class="hljs-operator">.</span> <span class="hljs-built_in">Connect</span> <span class="hljs-variable">It</span><span class="hljs-operator">,</span> <span class="hljs-built_in">If</span> <span class="hljs-variable">You</span> <span class="hljs-variable">Can</span><span class="hljs-operator">!</span><br><span class="hljs-built_in">E</span><span class="hljs-operator">.</span> <span class="hljs-variable">Guess</span><br><span class="hljs-variable">F</span><span class="hljs-operator">.</span> <span class="hljs-variable">XAR</span><br><span class="hljs-variable">G</span><span class="hljs-operator">.</span> <span class="hljs-variable">What</span> <span class="hljs-variable">a</span> <span class="hljs-variable">Special</span> <span class="hljs-built_in">Graph</span><br><span class="hljs-variable">H</span><span class="hljs-operator">.</span> <span class="hljs-variable">Ruler</span><br><span class="hljs-built_in">I</span><span class="hljs-operator">.</span> <span class="hljs-variable">A</span> <span class="hljs-variable">Funny</span> <span class="hljs-variable">Stone</span> <span class="hljs-variable">Game</span><br>现场赛只有<span class="hljs-variable">BEHI</span> 这<span class="hljs-number">4</span> 道题目有队伍成功通过，可是在验题赛中我们队伍的进<br>程完全不是这样，下面是我们的做题情况：<br><span class="hljs-number">22</span> 分钟 <span class="hljs-variable">A</span> 题，数学方法，<span class="hljs-number">1</span><span class="hljs-variable">Y</span><br>首先，我们<span class="hljs-number">3</span> 支队伍在<span class="hljs-number">30</span> 分钟之内都<span class="hljs-number">1</span><span class="hljs-variable">Y</span> 了<span class="hljs-variable">A</span> 题。<span class="hljs-variable">A</span> 题是一道中等难度的数学<br>题，可能<span class="hljs-variable">A</span> 题需要明确高次等差数列的求和公式，而且通过枚举来代替一些假设<br>可以大大简化问题。现场比赛时有些队伍做了不正确的假设导致始终<span class="hljs-variable">WA</span>。<br>记得当时<span class="hljs-variable">zhuzeyuan</span> 使用了一个奇怪的贪心方法，后来被<span class="hljs-variable">OpenGL</span> 找到一个反<br>例，这个测试用例被添加到正式比赛的测试数据之中，这个反例也成为了现场赛中<br>使得许多提交<span class="hljs-variable">WA</span> 的重要数据之一。<br><span class="hljs-number">30</span> 分钟<span class="hljs-built_in">E</span> 题，贪心，<span class="hljs-number">1</span><span class="hljs-variable">Y</span><br><span class="hljs-built_in">E</span> 是<span class="hljs-number">2006</span> 北京赛区最简单的题目，只需要直接的贪心法就可以解决。<br><span class="hljs-number">52</span> 分钟<span class="hljs-variable">H</span> 题，深度优先搜索，<span class="hljs-number">1</span><span class="hljs-variable">Y</span><br><span class="hljs-variable">H</span> 是一道搜索题，题目时限不是很紧，不需要太多的优化就可以通过。<br><span class="hljs-number">75</span> 分钟<span class="hljs-built_in">I</span> 题，标准的博弈<span class="hljs-variable">SG</span> 问题，<span class="hljs-number">1</span><span class="hljs-variable">Y</span><br><span class="hljs-built_in">I</span> 是标准的博弈问题，通过计算<span class="hljs-variable">SG</span> 就可以得到结果。这题其实有一个阴险的<br>地方，就是当某位置石子为大于<span class="hljs-number">0</span> 的偶数时，也需要考虑以保证结果的字典序最<br>小，好在我们及时避开了这个陷阱。现场很多队伍调入这个陷阱中，耽误了一些时<br>间。<br><span class="hljs-number">129</span> 分钟<span class="hljs-variable">B</span> 题，最短路径问题，<span class="hljs-number">3</span><span class="hljs-variable">Y</span><br><span class="hljs-variable">B</span> 是一张平面图的最大流问题，由于图形比较有特点，所以可以建图来计算最<br>小割。但是这张图有<span class="hljs-number">106</span> 个点，<span class="hljs-number">2</span><span class="hljs-operator">*</span><span class="hljs-number">106</span> 条边，最短路径需要用堆来辅助实现，首先<br>由于数组开小了<span class="hljs-variable">RTE</span> 了一次，然后由于用<span class="hljs-variable">map</span> 实现<span class="hljs-variable">TLE</span> 了一次。这题浪费了许多<br>时间。<br><span class="hljs-variable">G</span> 题，实现和调试了<span class="hljs-number">30</span> 分钟，超时<br><span class="hljs-variable">G</span> 是<span class="hljs-number">2006</span> 北京赛区最困难的题目之一，题目描述很简单，判断一张图是否为<br><span class="hljs-variable">co</span><span class="hljs-operator">-</span><span class="hljs-variable">graph</span>。我们算法的复杂度是<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n</span><span class="hljs-operator">*</span><span class="hljs-variable">m</span><span class="hljs-operator">/</span><span class="hljs-number">32</span><span class="hljs-punctuation">)</span>的，不过由于数据个数比较多，程序运<br>行时间远超过了时限。<br><span class="hljs-built_in">C</span> 题，贪心法实现<span class="hljs-number">50</span> 分钟，<span class="hljs-variable">WA</span><br><span class="hljs-built_in">C</span> 题是计算平面图曼哈顿最小生成树，直接计算是<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n2</span><span class="hljs-punctuation">)</span>的，但是题目中<span class="hljs-variable">n</span> 接<br>近<span class="hljs-number">100000</span>。我使用了一个贪心算法，其实和标准算法差距不大，不过还是导致<br><span class="hljs-variable">WA</span>。其实提前写<span class="hljs-built_in">C</span> 不是很合理的选择，当时没有注意到<span class="hljs-built_in">D</span>。<span class="hljs-built_in">C</span> 和<span class="hljs-variable">G</span> 难度相差无几。<br><span class="hljs-number">230</span> 分钟<span class="hljs-variable">F</span> 题，构造，<span class="hljs-number">1</span><span class="hljs-variable">Y</span><br><span class="hljs-variable">F</span> 题是很变态的构造问题，这题完全是<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 做的，我至今还不是很清楚算法。<br><span class="hljs-number">250</span> 分钟<span class="hljs-built_in">D</span> 题，计算几何，<span class="hljs-number">2</span><span class="hljs-variable">Y</span><br><span class="hljs-built_in">D</span> 题是一道比较复杂的计算几何，当判断一条直线是否穿过一个多边形的时候<br>忘记考虑了一种情况，<span class="hljs-variable">WA</span> 了<span class="hljs-number">1</span> 次。现场许多队伍其实都只忘记考虑了这一种情况，<br>但是可惜没有队伍该正确。<br>这场比赛最终我们队伍以<span class="hljs-number">7</span> 题结束，另外两队也都通过了<span class="hljs-number">7</span> 题。我们因此也<br>没有修改题目难度，随后让大家没有想到的是：一场极低通过率的比赛即将开始了。<br>北京赛区现场赛：<br>现场比赛中，我负责在某一个房间为参赛选手送打印资料，比赛<span class="hljs-number">60</span> 分钟左右<br>由于技术问题到<span class="hljs-variable">Judge</span> 室处理一些问题。经过<span class="hljs-number">5</span> 个小时的比赛，最终中科大<br><span class="hljs-variable">Student</span> 队通过<span class="hljs-number">4</span> 题获得冠军，厦门大学<span class="hljs-variable">btALT</span> 通过<span class="hljs-number">3</span> 题获得亚军，北京大学<br><span class="hljs-variable">RPWT</span>，浙江大学<span class="hljs-variable">gogogo</span> 和合肥工业大学<span class="hljs-variable">Love</span> <span class="hljs-variable">Wisdom</span> 也都通过<span class="hljs-number">3</span> 题分列<span class="hljs-number">3</span><span class="hljs-operator">-</span><span class="hljs-number">5</span> 位。<br>最终<span class="hljs-variable">Student</span>，<span class="hljs-variable">btALT</span> 和<span class="hljs-variable">Love</span> <span class="hljs-variable">Wisdom</span> 进军总决赛。<br>回顾比赛现场过程，首先让我们出乎意料的是<span class="hljs-built_in">E</span>，<span class="hljs-built_in">E</span> 是<span class="hljs-number">2006</span> 北京赛区中最简<br>单的题目，贪心法的方法参加比赛的同学都想到了，可是有一个小小的细节，对于<br>实数比较大小时，需要加入一个微小量<span class="hljs-variable">eps</span> 来控制精度。<span class="hljs-built_in">E</span> 题没有加<span class="hljs-variable">eps</span> 的提交占<br>到总提交的<span class="hljs-number">50</span><span class="hljs-operator">%</span>以上，我们称之为“经典提交”。这个小<span class="hljs-variable">tricky</span> 不慎导致很多队伍<br>迟迟不能通过第一题，对许多队伍的状态有不小的影响。<br>其次是<span class="hljs-variable">A</span>，<span class="hljs-variable">A</span> 题收到了很多队伍的提交，但是最终都没有队伍通过<span class="hljs-variable">A</span>。原因是<br>大家做了一些不保证正确的假设，当时我们都通过枚举的方法避免了这些假设。<br>另外，有一些队伍提早接触了<span class="hljs-variable">F</span> 和<span class="hljs-variable">G</span>，并深深地陷入其中。中科大早在<span class="hljs-number">240</span> 分<br>钟就通过了第<span class="hljs-number">4</span> 题，可是之后他们在<span class="hljs-variable">G</span> 上花费了不少精力，我们甚至想跑到他们<br>那里告诉他们<span class="hljs-variable">G</span> 是最难的。<br>记得<span class="hljs-number">180</span> 分钟到<span class="hljs-number">240</span> 分钟，我们只接收到了不超过<span class="hljs-number">10</span> 次提交，每次大家听到<br>提交的声音，所有<span class="hljs-variable">Judge</span> 一起点鼠标抢测试权。后来，在<span class="hljs-variable">TCCC2006</span> 上和<span class="hljs-variable">Ying</span> 说起<br>此事，据他说和<span class="hljs-number">2004</span> 年的广州赛区有许多相似之处。<br>总结：<br>祝贺所有获得好成绩的队伍，恭喜<span class="hljs-variable">Student</span>，<span class="hljs-variable">btALT</span> 和<span class="hljs-variable">Love</span> <span class="hljs-variable">Wisdom</span> 进军总决<br>赛。并再次对网络赛给大家带来的不便道歉。后来清华举行了名为复活赛的比赛，<br>我想复活赛应该就是从那时开始出现的吧？<br>当年清华一共有<span class="hljs-number">6</span> 支队伍，但是只参加两个赛区的比赛，造成每个赛区之前<br>都要进行小规模<span class="hljs-variable">PK</span>，最终只有<span class="hljs-number">4</span> 支队伍有机会参加<span class="hljs-variable">ACM</span> 分区赛。<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 建<br>立之初比较顺利，获得了参加两个赛区比赛的机会，迎接<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 的将是上<br>海和西安赛区的挑战。<br>我们<span class="hljs-number">3</span> 人能够走在一起，要感谢吴文虎老师的支持，组队初期虽然没有经历<br>大战，但是那些快乐的时光至今都很难忘怀。<br>附北京赛区排名<br><span class="hljs-number">1</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span> <span class="hljs-variable">of</span> <span class="hljs-variable">China</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Student</span> <span class="hljs-built_in">First</span> <span class="hljs-variable">Place</span> <span class="hljs-number">4</span> <span class="hljs-number">628</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Xiamen</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">btALT</span> <span class="hljs-variable">Second</span> <span class="hljs-variable">Place</span> <span class="hljs-number">3</span> <span class="hljs-number">417</span><br><span class="hljs-number">3</span> <span class="hljs-variable">Peking</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">KU</span> <span class="hljs-variable">RPWT</span> <span class="hljs-variable">Third</span> <span class="hljs-variable">Place</span> <span class="hljs-number">3</span> <span class="hljs-number">460</span><br><span class="hljs-number">4</span> <span class="hljs-variable">Zhejiang</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">gogogo</span> <span class="hljs-variable">Fourth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">3</span> <span class="hljs-number">471</span><br><span class="hljs-number">5</span> <span class="hljs-variable">Hefei</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Love</span> <span class="hljs-variable">Wisdom</span> <span class="hljs-variable">Fifth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">3</span> <span class="hljs-number">477</span><br><span class="hljs-number">6</span> <span class="hljs-variable">Fudan</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Yin</span><span class="hljs-operator">-</span><span class="hljs-variable">Yang</span> <span class="hljs-variable">Sixth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">204</span><br><span class="hljs-number">7</span> <span class="hljs-variable">Tianjin</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-type">TJU_Rhythm</span> <span class="hljs-variable">Seventh</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">212</span><br><span class="hljs-number">8</span> <span class="hljs-variable">Beihang</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">L3</span> <span class="hljs-variable">Eighth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">254</span><br><span class="hljs-number">9</span> <span class="hljs-variable">Peking</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">KU4</span> <span class="hljs-variable">Ninth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">275</span><br><span class="hljs-number">9</span> <span class="hljs-variable">Harbin</span> <span class="hljs-variable">Institute</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">IAC</span> <span class="hljs-variable">Ninth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">282</span><br><span class="hljs-number">10</span> <span class="hljs-variable">ZhongShan</span> <span class="hljs-punctuation">(</span><span class="hljs-variable">Sun</span> <span class="hljs-variable">Yat</span><span class="hljs-operator">-</span><span class="hljs-variable">sen</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-type">ZSU_Pyrenean</span> <span class="hljs-variable">Tenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">288</span><br><span class="hljs-number">11</span> <span class="hljs-variable">Zhejiang</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">hoebus</span> <span class="hljs-variable">Eleventh</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">311</span><br><span class="hljs-number">11</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Electronic</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span> <span class="hljs-variable">of</span> <span class="hljs-variable">China</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Gryffindor</span> <span class="hljs-variable">Eleventh</span> <span class="hljs-variable">Place</span><br><span class="hljs-number">2</span> <span class="hljs-number">319</span><br><span class="hljs-number">12</span> <span class="hljs-variable">ZhongShan</span> <span class="hljs-punctuation">(</span><span class="hljs-variable">Sun</span> <span class="hljs-variable">Yat</span><span class="hljs-operator">-</span><span class="hljs-variable">sen</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-type">ZSU_Himalayas</span> <span class="hljs-variable">Twelfth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">324</span><br><span class="hljs-number">12</span> <span class="hljs-variable">Fuzhou</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">OrOrz</span> <span class="hljs-variable">Twelfth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">412</span><br><span class="hljs-number">13</span> <span class="hljs-variable">Beijing</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Posts</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Telecommunications</span> <span class="hljs-operator">=&gt;</span><span class="hljs-variable">Vitamin</span> <span class="hljs-variable">Thirteenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">432</span><br><span class="hljs-number">14</span> <span class="hljs-variable">Ningbo</span> <span class="hljs-variable">Institute</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span><span class="hljs-operator">,</span><span class="hljs-variable">Zhejiang</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">impact</span> <span class="hljs-variable">Fourteenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">435</span><br><span class="hljs-number">15</span> <span class="hljs-variable">Huazhong</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">rodimus</span> <span class="hljs-variable">Fifteenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">442</span><br><span class="hljs-number">16</span> <span class="hljs-variable">Nanjing</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">HOENIX</span> <span class="hljs-variable">Sixteenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">459</span><br><span class="hljs-number">17</span> <span class="hljs-variable">Fuzhou</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-built_in">Laplacian</span> <span class="hljs-variable">Seventeenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">467</span><br><span class="hljs-number">17</span> <span class="hljs-variable">Fudan</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Shuangwaiwai</span> <span class="hljs-variable">Seventeenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">500</span><br><span class="hljs-number">17</span> <span class="hljs-variable">National</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Defense</span> <span class="hljs-variable">Technology</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Robust</span> <span class="hljs-variable">Seventeenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">517</span><br><span class="hljs-number">18</span> <span class="hljs-variable">Fudan</span> <span class="hljs-variable">University</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">Free</span> <span class="hljs-variable">Wings</span><span class="hljs-operator">,</span> <span class="hljs-variable">Yeah</span><span class="hljs-operator">!</span> <span class="hljs-variable">Eighteenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">518</span><br><span class="hljs-number">18</span> <span class="hljs-variable">Hong</span> <span class="hljs-variable">Kong</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span><span class="hljs-operator">=&gt;</span><span class="hljs-variable">HKUST1</span> <span class="hljs-variable">Eighteenth</span> <span class="hljs-variable">Place</span> <span class="hljs-number">2</span> <span class="hljs-number">692</span><br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作<br>个回顾。<span class="hljs-variable">GCJ2006</span>，<span class="hljs-variable">ACM2005</span> 和<span class="hljs-variable">TCCC2006</span> 之后，<span class="hljs-number">2006</span> 年对于我来说是一个大丰<br>收，昨天晚上回顾了<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 成立先期的事情吧，今天先发惊心动魄的<span class="hljs-variable">ACM</span><br>上海<span class="hljs-number">2006</span> 吧。<br><span class="hljs-number">2006</span> 年<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span><span class="hljs-punctuation">(</span>中<span class="hljs-punctuation">)</span>——<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 上海对决<br>回忆到，当年清华一共有<span class="hljs-number">6</span> 支队伍，但是只参加两个赛区的比赛，造成每个赛<br>区之前都要进行小规模<span class="hljs-variable">PK</span>，最终只有<span class="hljs-number">4</span> 支队伍有机会参加<span class="hljs-variable">ACM</span> 分区赛。<span class="hljs-variable">Mobile</span><br><span class="hljs-variable">Robot</span> 建立之初比较顺利，获得了参加两个赛区比赛的机会，迎接<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 的<br>将是上海和西安赛区的挑战。<br>比赛前：空前的豪华阵容<br>记得清华大学出发上海赛区的时间是<span class="hljs-number">10</span> 月<span class="hljs-number">20</span> 日晚上，至于为什么能记得如此<br>精确，是因为在那之前我经历了真正意义上的“赶火车”。<span class="hljs-number">10</span> 月<span class="hljs-number">18</span> 日<span class="hljs-variable">TCCC2006</span><br>在圣地亚哥落下帷幕，<span class="hljs-number">19</span> 日从旧金山机场起飞会北京，飞机着陆时间是<span class="hljs-number">20</span> 日下午<br><span class="hljs-number">2</span> 点半，进海关之后已经快<span class="hljs-number">4</span> 点了，我立即乘坐机场大巴直奔火车站与大部队会合，<br>之间都没有时间回寝室。<br>来到中亚饭店报道拿到参赛队伍名单的时候，就赫然发现上海<span class="hljs-number">2006</span> 的参赛队<br>伍实力达到了几年来一个不可逾越的巅峰。上海交大的<span class="hljs-number">1234</span> 队都出现在了名单中，<br>还有浙大和北大的<span class="hljs-variable">Final</span> 队都来了，这些还不够，芜湖一中的<span class="hljs-variable">Loner</span><span class="hljs-punctuation">(</span>周冬<span class="hljs-punctuation">)</span>，上海微<br>软<span class="hljs-variable">ATC</span> 的<span class="hljs-variable">lympanda</span> 也参加比赛。上海交大一直是这几年来清华国内最强劲的对手，<br>如今交大又占据主场优势，实力深不可测。上海微软<span class="hljs-variable">ATC</span> 虽然是旅游队，但是<br><span class="hljs-variable">lympanda</span> 凭借在<span class="hljs-variable">TopCoder</span> 上的表现，没有人敢轻视这位无冕之王的实力。<br>对于上海赛区，清华也派出了华丽的阵容，参赛的有<span class="hljs-number">3</span> 支队伍，除了<span class="hljs-variable">Mobile</span><br><span class="hljs-variable">Robot</span>（我，<span class="hljs-variable">geworm</span><span class="hljs-punctuation">(</span>鬲融<span class="hljs-punctuation">)</span>和<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span><span class="hljs-punctuation">(</span>胡伟栋<span class="hljs-punctuation">)</span>）之外，还有鼎盛时期的<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span><br>（<span class="hljs-variable">b142857</span><span class="hljs-punctuation">(</span>候启明<span class="hljs-punctuation">)</span>，<span class="hljs-variable">lxd</span><span class="hljs-punctuation">(</span>林希德<span class="hljs-punctuation">)</span>和<span class="hljs-variable">zhuzeyuan</span><span class="hljs-punctuation">(</span>朱泽园<span class="hljs-punctuation">)</span>）以及后来的西安赛区亚军<br><span class="hljs-variable">GotoFly</span>（<span class="hljs-variable">zcgzcgzcg</span><span class="hljs-punctuation">(</span>朱晨光<span class="hljs-punctuation">)</span>，<span class="hljs-variable">wangjun</span><span class="hljs-punctuation">(</span>王俊<span class="hljs-punctuation">)</span>，<span class="hljs-variable">tedcn</span><span class="hljs-punctuation">(</span>龙凡<span class="hljs-punctuation">)</span>）。记得练习赛之前，<br>大家一起围圆桌吃饭，朱晨光突然和旁边的王俊说，好像就我们两个没有参加过<br><span class="hljs-variable">IOI</span>，然后另一边林希德补了一句，就我们三个不是金牌。<br>我第一次有机会敬仰候启明的时候，是自己第一次参加<span class="hljs-variable">NOI</span>——<span class="hljs-variable">NOI2002</span> 天津，<br>候启明以满分的成绩获得冠军，当时的亚军就是林希德。之后的冬令营，我以非正<br>式营员参加测试神奇得获得第三名，但更重要的是冬令营测试的冠亚军就是候启明<br>和林希德，之后我再没有和两位前辈在<span class="hljs-variable">OI</span> 上交过手。时光飞逝，我代表<span class="hljs-variable">bomber</span><br>队参加<span class="hljs-number">2005</span> 年的杭州赛区，被候启明领军的<span class="hljs-variable">Legendary</span> <span class="hljs-variable">Team</span>打得一败涂地。随后<br><span class="hljs-number">2006</span> 年初的<span class="hljs-variable">Google</span> <span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span> <span class="hljs-variable">China</span><span class="hljs-punctuation">(</span><span class="hljs-variable">GCJC</span><span class="hljs-punctuation">)</span><span class="hljs-number">2006</span> 上，我获得第三名，记得当天与获<br>得亚军的候启明同住在总统套房。其实在上海赛区之前我没有在正式比赛中战胜过<br>他们。<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 的另一人<span class="hljs-variable">zhuzeyuan</span> 现在是我的队友，记得他当时在<span class="hljs-variable">TopCoder</span> 仍<br>然是<span class="hljs-variable">Target</span>（你可是早点在今年<span class="hljs-variable">Final</span> 之前把<span class="hljs-variable">Target</span> 拿回来呀，几次涨停就可以<br>了），实力也不在前二人之下。<br>面对知根知底的<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span>，大家都知道一场大战在即，从实力上分析，我觉<br>得<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 略弱，不过赛前我们都没有信心一定能够在比赛中占据优势。而<br>且我们心里深知，上海赛区的结果将很有可能直接决定清华大学当年的总决赛队伍。<br>面对这种残酷的现实，我们都无可奈何，有时一些有实力进军总决赛的队伍在清华<br>都没有机会参加分区比赛。<br>个人的经验看来，我认为在势均力敌的时候，最重要一点是明白自己的优势和<br>劣势所在，要用自己最强的方面来对抗对手，避免暴露出自己的劣势。我想在这一<br>点上<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 可能没有我们做得好。<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 的优势是三人的总体实力很强，<br>他们完全可以采用三大高手的组队模式；我们组队时间长，配合默契，而且当时自<br>己刚刚从<span class="hljs-variable">TCCC2006</span> 以<span class="hljs-number">100</span><span class="hljs-operator">%</span>正确率回国，保持了良好的状态。从单人比赛上讲，<br>当时我的状态即使有<span class="hljs-variable">Petr</span> 和<span class="hljs-variable">Tomek</span> 在场，我都并不认为自己一定会有明显的劣势。<br>比赛场地是上海大学的一个大体育馆，现场气氛很热烈，想到我们用<span class="hljs-number">4</span> 个机房<br>办的北京赛区的现场比赛，不由地觉得有些寒酸。<br>在场外碰到了<span class="hljs-variable">lympanda</span>，他向我了解刚结束的<span class="hljs-variable">TCCC2006</span> 的情况，我于是给<br>他描述了一下几道现场比赛过程中<span class="hljs-number">1000</span> 分的题目，结果全部都被<span class="hljs-variable">panda</span> 秒杀了，<br>无限敬仰呀！同时也第一次见到了周冬。<br>提一件飘逸事情，记得当时练习赛有<span class="hljs-number">3</span> 题，封版时没有队伍通过<span class="hljs-variable">B</span> 题，但是其<br>实在封版后我们通过了这题，我们应该是当时唯一在练习赛中<span class="hljs-variable">AK</span> 的队伍。记得之<br>后好像还和中山大学的郭老师交流过这题。不过至于<span class="hljs-variable">B</span> 为什么能够<span class="hljs-variable">AC</span>：<span class="hljs-variable">B</span> 题是一<br>道需要<span class="hljs-variable">SPJ</span> 的题目，可是练习赛的时候没有<span class="hljs-variable">SPJ</span>，而我又坚信自己的程序是正确的，<br>于是我不断提交。可能是由于<span class="hljs-variable">Judge</span> 不耐烦了，才用<span class="hljs-variable">Yes</span> 的方法让我们停止。<br>比赛之前的晚上我们都休息得很好，第二天早上以充足的精力迎接史诗般的上<br>海赛区决战。<br>比赛过程：<span class="hljs-number">400</span> 米赛跑<br>我中学是很喜欢参加<span class="hljs-number">400</span> 米比赛，<span class="hljs-number">400</span> 米比赛从起跑姿势角度应该认为是短跑，<br>但是<span class="hljs-number">400</span> 米已经远远超过了冲刺极限。所以<span class="hljs-number">400</span> 米跑中，要求我们从发令枪响起的<br>时候就加速启动，直到拼尽全力为止。<br>我们回顾一下比赛的过程吧，上海赛区比赛之后，我们写下了详细的比赛过程：<br>按照一贯的方法，鬲融从<span class="hljs-variable">A</span> 开始读，胡伟栋从<span class="hljs-variable">J</span> 开始读，我准备编程的环境，<br>然后从中间选择题目读。鬲融读完<span class="hljs-variable">A</span> 后，发现<span class="hljs-variable">A</span> 是一道简单题。于是选择先写<span class="hljs-variable">A</span><br>题。<br><span class="hljs-variable">A</span>：给定<span class="hljs-variable">ACM</span>网上预选赛的比赛晋级规则，求每所学校的晋级队伍数。<br>简单模拟题，时间复杂度<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-built_in">N</span><span class="hljs-punctuation">)</span>。本题题目有一个疑问：一个学校出线的队伍<br>数目可能比该学校参加预选赛的队伍数目还多，但是题目描述和样例表明不需要考<br>虑这种情况。<br><span class="hljs-variable">ACM</span> 比赛的第一题的选择对比赛的进程影响很大，当没有优先选择比赛中最<br>简单 的题目时，更需要保持冷静。<br>在我写<span class="hljs-variable">A</span> 的过程中，鬲融看了<span class="hljs-variable">B</span> 和<span class="hljs-built_in">C</span>，发现<span class="hljs-built_in">C</span> 也非常简单，于是马上做<span class="hljs-built_in">C</span>。<br><span class="hljs-built_in">C</span>：将一棵节点带权的树划分成两半，使两半的权值和的差最小。<br>枚举或者树的遍历，时间复杂度<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-built_in">N</span><span class="hljs-punctuation">)</span>。去年有一个深刻的教训：当遍历树的<br>时候，很容易造成堆栈溢出<span class="hljs-punctuation">(</span>杭州赛区留下的疙瘩<span class="hljs-punctuation">)</span>。对于本题的范围，保险起见没<br>有使用<span class="hljs-variable">DFS</span>，而是使用<span class="hljs-variable">BFS</span>。使用<span class="hljs-variable">BFS</span> 略微增加了编程量，但是可以在一定程度<br>上避免不必要的麻烦。<br>鬲融发现<span class="hljs-built_in">D</span> 是一道经典的统计题，在不到<span class="hljs-number">3</span> 分钟的讨论后，我们得出了可行的<br>算法，于是下面写了<span class="hljs-built_in">D</span>。在写<span class="hljs-built_in">D</span> 的时候，鬲融和胡伟栋把题看完了，经过讨论，<br>决定胡伟栋开始想一道数学题<span class="hljs-built_in">I</span>，而鬲融继续看题义不是很清楚的<span class="hljs-variable">G</span> 和<span class="hljs-variable">J</span> 两题。<br><span class="hljs-built_in">D</span>：给出平面里的一系列点，要找一个矩形，使矩形边上的点最多。<br>离散化后，先判断一条直线的情况。枚举两条横边，然后枚举竖边，一旦一条<br>右边的边比左边的边好，左边的边就不会再有作用。因此，枚举竖边的过程很容易<br>做到<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-built_in">N</span><span class="hljs-punctuation">)</span>，总的复杂度是<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">N3</span><span class="hljs-punctuation">)</span><br>这题其实存在<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">N2logN</span><span class="hljs-punctuation">)</span>的算法，我想出题人也应该没有在第一时间想到吧。<br>做出<span class="hljs-built_in">D</span> 后写了<span class="hljs-variable">B</span>，原因是<span class="hljs-variable">B</span> 的算法相对简单。但是意想不到的是：<span class="hljs-variable">B</span> 的样例不<br>合法，而且<span class="hljs-variable">Clarification</span> 的速度非常慢，于是只好先把<span class="hljs-variable">B</span> 放在一边。这个过程浪费<br>了不少宝贵时间。<br>随后看到<span class="hljs-variable">team109</span><span class="hljs-punctuation">(</span><span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span><span class="hljs-punctuation">)</span>过了一道红色气球，感觉是<span class="hljs-variable">G</span>，于是鬲融给我讲<br>了<span class="hljs-variable">G</span>，但是发现<span class="hljs-variable">G</span> 实在不像算法简单或程序简单的题目。<br>此时，胡伟栋推出了<span class="hljs-built_in">I</span> 的一个很简明的公式。而且我们发现<span class="hljs-built_in">I</span> 的气球也是红色<br>的。刚才看<span class="hljs-variable">G</span> 很可能是被误导的。于是写了<span class="hljs-built_in">I</span>。<br>写<span class="hljs-built_in">I</span> 的过程中，由于鬲融看的题基本已经被做完了，胡伟栋给鬲融讲了<span class="hljs-variable">H</span> 的题<br>意，鬲融想出了一个可行的做法，不过由于还有更简单的题并没有马上做。<br><span class="hljs-built_in">I</span>：求杨晖三角形第<span class="hljs-built_in">N</span><span class="hljs-operator">+</span><span class="hljs-number">1</span> 行不能被质数整除的数的个数。<br>可以找出规律，然后写出公式，时间复杂度<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">logN</span><span class="hljs-punctuation">)</span>。我在并不知题目意思的<br>情况下写过了<span class="hljs-built_in">I</span>，依靠胡伟栋的公式，我们度过了此次比赛第一段艰难的时期。<br>从过<span class="hljs-built_in">D</span> 题到过<span class="hljs-built_in">I</span> 题，大概有<span class="hljs-number">40</span> 分钟的时间。这段时间我们主要的失误有：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">B</span> 的样例不合法，这其实不是我们的错误。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> 受气球颜色的误导，过早思考一道很难的题目。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> 后来听朱泽园的建议：由于一个人的问题导致卡住，应该一个人解决，不<br>应该让全队都陷入混乱中。<br>我认为我们直接选择写另外一道题目主要有两个原因：一是<span class="hljs-variable">B</span> 卡住的原因比较<br>特殊，不是我们花时间就能克服的；二是<span class="hljs-built_in">I</span> 的算法比较清楚，非常稳定。<br>等<span class="hljs-built_in">I</span> 过了之后，<span class="hljs-variable">B</span> 的<span class="hljs-variable">Clarification</span> 出来了，<span class="hljs-variable">Judge</span> 换了一组样例。于是开始调<span class="hljs-variable">B</span>。<br><span class="hljs-variable">B</span>：给出<span class="hljs-number">16</span> 个数，将他们排成十字架形，使力矩平衡。求本质不同的方案数。<br>十字架一共有<span class="hljs-number">4</span> 个“臂”。首先找出一个“臂”的所有情况。然后将等值的无<br>重复的合并成两个相对的“臂”。然后从<span class="hljs-number">16</span> 个数中选出<span class="hljs-number">8</span> 个，将他们作为一组，<br>另外<span class="hljs-number">8</span> 个作为另一组，这种方案的总数为前<span class="hljs-number">8</span> 个成对的方案数乘后<span class="hljs-number">8</span> 个成对的方案<br>数。最后把方案数求和除<span class="hljs-number">4</span>。<br>本题属于搜索题，而且时限特别紧，由于搜索问题的优化空间往往很大，而且<br>又是多组数据，所以很容易造成<span class="hljs-variable">TLE</span>。在调对样例后<span class="hljs-variable">TLE</span> 了一次，改进了算法后<br>由于开小数组<span class="hljs-variable">RE</span> 了一次，终于在第三次提交通过了<span class="hljs-variable">B</span> 题。<br>记得高中时一次在网上做题<span class="hljs-punctuation">(</span>只记得是<span class="hljs-variable">xreborner</span> 出的题目<span class="hljs-punctuation">)</span>的时候，比赛一开始<br>就写一道时限很紧的题目，估计开始程序的正确性是没有问题的，就是效率比较低；<br>但是，在不断优化的过程中改错了程序，导致<span class="hljs-number">1</span> 个小时以后当程序不<span class="hljs-variable">TLE</span> 了以后，<br>程序变成了<span class="hljs-variable">WA</span>。这样使得信心完全崩溃。<br>听了很多同学讨论之后，发现不少队伍就完全卡在了<span class="hljs-variable">B</span> 题上。以后对这种题目<br>只能倍加小心，现在我们还没有什么特别好的方法。而且，<span class="hljs-variable">B</span> 题的样例只具有测试<br>性，不具有调试性，编程时必须特别仔细才行。<br>这时大概才<span class="hljs-number">1</span> 个多小时，我们看似顺利地通过了<span class="hljs-number">5</span> 题；但是现场的情况并没有<br>任何优势可言，<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 在几分钟后通过第<span class="hljs-number">5</span> 题，两个队伍的罚时只相差<span class="hljs-number">1</span> 分钟。<br>随后我们到达了第二段艰难的时期，主要原因是鬲融把<span class="hljs-variable">F</span> 的题目看漏了一个条<br>件，与胡伟栋讨论后误以为这个题比较容易，很快这题出现<span class="hljs-built_in">Run</span><span class="hljs-operator">-</span><span class="hljs-variable">time</span> <span class="hljs-variable">Error</span> 好在重<br>读题后发现错误并及时放弃，没有再浪费时间去把<span class="hljs-built_in">Run</span><span class="hljs-operator">-</span><span class="hljs-variable">time</span> <span class="hljs-variable">Error</span> 调成<span class="hljs-variable">WA</span>。如果<br>当时死做此题则后果不堪设想。<br>在鬲融和胡伟栋分别读<span class="hljs-variable">F</span> 的程序以及题目的时候，由于现在剩下的题目都比较<br>复杂，我们选择了一道相对清楚的题目<span class="hljs-variable">H</span> 继续做。<br><span class="hljs-variable">H</span>：对一个集合进行两种操作：插入一个数和询问<span class="hljs-variable">MOD</span> <span class="hljs-variable">Y</span> 最小的数中最后一<br>个数。<br>由于数字的范围是<span class="hljs-punctuation">[</span><span class="hljs-number">1.</span><span class="hljs-number">.500000</span><span class="hljs-punctuation">]</span>，先选择一个合适的<span class="hljs-variable">M</span>。当<span class="hljs-variable">Y</span><span class="hljs-operator">&lt;=</span><span class="hljs-variable">M</span>时，通过插入<br>时直接保存来处理，当<span class="hljs-variable">Y</span><span class="hljs-operator">&gt;</span><span class="hljs-variable">M</span> 时直接枚举，用并查集求一个元素的后续。这样每一<br>次操作的时间复杂度是<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-built_in">Sqrt</span><span class="hljs-punctuation">(</span><span class="hljs-number">500000</span><span class="hljs-punctuation">)</span><span class="hljs-punctuation">)</span><span class="hljs-operator">.</span><br>但是，开始选择<span class="hljs-variable">M</span>为<span class="hljs-number">1000</span>，并没有充分估计复杂度的平衡性。开始我们认为<br>并查集的常数较大，但是后来感觉到并查集的常数相对小一些，于是把<span class="hljs-variable">M</span>选为<br><span class="hljs-number">500</span> 就过了。后来在同出题人交流的时候，被告之<span class="hljs-variable">M</span>取在<span class="hljs-number">400</span><span class="hljs-operator">-</span><span class="hljs-number">800</span> 的范围内都可以。<br>第二段艰难的时期的原因可能不仅仅是题目看漏，也由于题目难度已经增加。<br>好在当时特别是当<span class="hljs-variable">H</span> 的程序<span class="hljs-variable">TLE</span> 之后，我们都比较冷静，相信自己<span class="hljs-variable">H</span> 题的算法是<br>正确的算法，只是参数的选择不够合理。这种考验在平时一般是很少遇到的，经受<br>这次考验之后，再遇到类似的问题，我们应该能够更冷静一些。<br>过了<span class="hljs-variable">H</span> 之后，鬲融已经再次确认了<span class="hljs-variable">J</span> 的题意，随着气球的指引，我们决定攻克<br>本次比赛最大的“纸老虎”：<span class="hljs-variable">J</span>，而做<span class="hljs-variable">J</span> 的过程中胡伟栋一直在想<span class="hljs-variable">G</span>，已经大致得<br>到了算法的框架。<br><span class="hljs-variable">J</span>：给出一些数的大小限制的关系，求更精确的关系后者判断为矛盾。<br>转换成图的模型，不断迭带调整，直到不能调整为止。当然这题由于大小限制<br>关系中既有’<span class="hljs-operator">&lt;=</span>’还有’<span class="hljs-operator">&lt;</span>’，所以需要判断<span class="hljs-variable">XI</span><span class="hljs-operator">&lt;</span><span class="hljs-variable">XI</span> 是不合法的。时间复杂度<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-built_in">N</span><br>３<span class="hljs-punctuation">)</span>。<br><span class="hljs-variable">J</span> 题的数据输入输出比较复杂，但是题目本身很简单。这题对编程能力提出了很高<br>的要求。<br>通过<span class="hljs-variable">J</span> 题之后，看了一下<span class="hljs-variable">board</span>，当时<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 只有<span class="hljs-number">5</span> 题，不过在我们还没<br>有反应过来的时候<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 就也同样<span class="hljs-number">7</span> 题了，罚时上我们领先<span class="hljs-number">4</span> 次提交。<br>在比赛的前<span class="hljs-number">200</span> 分钟，我延续了<span class="hljs-variable">TCCC2006</span> 的良好状态。我们配合默契，在面<br>对<span class="hljs-variable">BHJ</span> 这样琐碎的题目时，队友会提前把需要注意的细节总结在纸上，整个 过程<br>都保持得很平滑。另外，鬲融和胡伟栋在我做每一题时都准备了很合适的测试数据，<br>大大减小了我测试的时间并很有效地提高了提交正确率。由于剩下的题目难 度明<br>显高出一个档次，在通过<span class="hljs-number">7</span> 题时的罚时领先是最后获得比赛胜利的重要砝码。<br>现在剩下的只有<span class="hljs-built_in">E</span>，<span class="hljs-variable">F</span>，<span class="hljs-variable">G</span> 三道没有队通过的题目了，其实最终也没有队伍通<br>过。我们曾经读错过<span class="hljs-variable">F</span>，因此这次分别尝试了<span class="hljs-built_in">E</span> 和<span class="hljs-variable">G</span>，但是都失败了。这里我们曾<br>经讨论过先做<span class="hljs-built_in">E</span> 还是先做<span class="hljs-variable">G</span>，当时面临的选择是：<span class="hljs-built_in">E</span> 的复杂度估计较高，不知优化<br>后能否通过，而<span class="hljs-variable">G</span> 的算法性更强，胡伟栋仍然没能完全清楚如何解决，实现的复<br>杂度高于<span class="hljs-built_in">E</span>。我们这次带有赌博性的选择了<span class="hljs-built_in">E</span>，并没有仔细考虑如果<span class="hljs-built_in">E</span> 的时间要求<br>过于严格会出现什么问题（可能与<span class="hljs-variable">B</span> 的相对轻松通过有一定关系），在此后的比<br>赛中我们应该注意周全考虑，尽量选择题意清楚并且复杂度容易估计的题目。<br><span class="hljs-built_in">E</span>：带限制的有向图的第<span class="hljs-built_in">K</span> 短路。<br>本题其实有标准的<span class="hljs-variable">A</span><span class="hljs-operator">*</span>算法，我们也使用了这个算法。但由于复杂度过高，我<br>们的程序一直<span class="hljs-variable">TLE</span>。据<span class="hljs-variable">Judge</span> 说这题对时间的要求非常严格。<br><span class="hljs-variable">G</span>：在一个森林的若干点布置仪器，仪器有作用范围<span class="hljs-built_in">D</span>，仪器之间的距离需要<br>大于等于<span class="hljs-built_in">D</span>，求最大的覆盖长度和最小的权。<br>本题可以使用二次方状态的动态规划，类似<span class="hljs-variable">CTSC2004</span> 的一题。我和胡伟栋讨<br>论后成功想出了正确的方法，并且在最后时刻写出了程序，而鬲融和胡伟栋则出了<br>一些测试数据，将数据调过后时间已经很紧张了。首先由于忘记优化<span class="hljs-variable">floyd</span> 超时了<br>几次。在优化了<span class="hljs-variable">floyd</span> 算法之后，还是没有考虑到图不连通的情况，未能在比赛结<br>束前调出。<br><span class="hljs-variable">F</span>：给出一些公理，假设和定理之间的关系，依次尝试，推出尽可能多的定理。<br>在同等情况下要求使用的假设最少。<br>本题可以用最小费用最大流解决，但是比较容易实现的网络流算法都很难在时<br>限内出解。<br>现在看来，<span class="hljs-variable">EFG</span> 三题中的<span class="hljs-built_in">E</span> 没有比赛中想像得那么难，当时比赛中受到巨大压<br>力的影响没能攻破此题，不过<span class="hljs-variable">FG</span> 题即使出现在<span class="hljs-variable">CTSC</span> 难度的比赛上也非常合适。<br>比赛结束：罚时险胜<br>比赛结束时我们与<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 同为<span class="hljs-number">7</span> 题，上海交大一队最终也通过了<span class="hljs-number">7</span> 题，我<br>们依靠罚时的微弱优势险胜。经过惊天地泣鬼神的<span class="hljs-number">300</span> 分钟，我们终于获得了梦寐<br>以求的<span class="hljs-number">2006</span> 上海赛区冠军。<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 凭借着上海赛区的夺冠，已经可以认为<br>获得了进军<span class="hljs-number">2007</span> 东京世界总决赛的入场券。<br>比赛结束后见到了很多复旦的老朋友和吴永辉老师，吴老师还是和以前一样，<br>玩笑开个不停。那些复旦的老朋友赛前由于是参与出题，我们一直没有看到，颁奖<br>仪式之前，我们终于有机会在后场一起聊天。不过聊天这些时间中，我和<span class="hljs-variable">b142857</span><br>错过了郭老师在颁奖仪式前进行的“点名”（当时郭老师要求我们上去讲解题目），<br>实在不好意思。<br>总结：<br>首先向<span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> 致敬，即使在最后一刻，相信大家都还仍然有机会，棋逢对<br>手也是我<span class="hljs-variable">ACM</span>生涯中的一大幸事。当两支队伍都通过<span class="hljs-number">7</span> 题的时候，排在第<span class="hljs-number">3</span> 名的<br>队伍才刚刚<span class="hljs-number">5</span> 题。也就是说，我们两支队伍其实只用了<span class="hljs-number">2</span><span class="hljs-operator">/</span><span class="hljs-number">3</span> 的比赛时间就锁定了上<br>海赛区的冠亚军。<br>上海交大一队最终也通过了<span class="hljs-number">7</span> 题，比赛开始时我们就注意到了交大开场时非常<br>不顺利，不过顽强的交大一队稳扎稳打，在最后一小时也成功通过了第<span class="hljs-number">7</span> 题。在这<br>里向交大致敬，开场的种种不利不亚于我在杭州<span class="hljs-number">2005</span> 时的起跑，你们能够沉着应<br>战，破釜沉舟的精神一直值得我们学习。当时交大一队中有一位来自辽宁的选手辛<br>韬，记得<span class="hljs-variable">NOI2003</span> 之前我们有数次交手都以我失败告终，后来经常在许多网上比<br>赛中切磋，<span class="hljs-number">2005</span> 年<span class="hljs-variable">ACM</span> 北京赛区也有你熟悉的身影，在清华早有耳闻你在交大的<br>优异成绩，祝福你今后越来越好。<br>这次比赛的命题工作是由复旦大学担任的，复旦大学的命题特点与东欧的命题<br>风格很接近，题目的算法性偏强，题目对程序运行速度要求普遍高。<br>按照<span class="hljs-variable">panda</span> 的说法，上海微软<span class="hljs-variable">ATC</span> 队由于一些配合的失误，最终只通过<span class="hljs-number">5</span> 题，<br>不过也是前<span class="hljs-number">10</span> 的队伍之一。另外，芜湖一中队也顺利通过<span class="hljs-number">5</span> 题排进前十。<span class="hljs-variable">GotoFly</span><br>通过第<span class="hljs-number">3</span> 题的时候还排在第<span class="hljs-number">3</span>，不过后来卡死在<span class="hljs-variable">J</span> 上了，有些可惜。<br>后来，分配总决赛名额的时候，上海赛区得到了<span class="hljs-number">10</span> 个总决赛名额，这个数字<br>相信也是这些年来的之最吧。<br>这是一场值得纪念的比赛，参加<span class="hljs-number">2006</span> 上海赛区的强队实力远高于几年内的各<br>大赛区，能够站立在上海赛区的最高领奖台是<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 获得的最高荣誉之一。<br>经历了上海赛区大战的洗礼，接下来的西安赛区出场的则是更成熟的<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span>。<br>附上海赛区排名：<br><span class="hljs-number">1</span> <span class="hljs-variable">Tsinghua</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> <span class="hljs-number">7</span> <span class="hljs-number">617</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Tsinghua</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Shangri</span><span class="hljs-operator">-</span><span class="hljs-variable">La</span> <span class="hljs-number">7</span> <span class="hljs-number">709</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Shanghai</span> <span class="hljs-variable">Jiao</span> <span class="hljs-variable">Tong</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Lacotix</span> <span class="hljs-number">7</span> <span class="hljs-number">1034</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Fudan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Symphonic</span> <span class="hljs-variable">Rain</span> <span class="hljs-number">6</span> <span class="hljs-number">924</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Shanghai</span> <span class="hljs-variable">Jiao</span> <span class="hljs-variable">Tong</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Prodigies</span> <span class="hljs-number">6</span> <span class="hljs-number">957</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Fudan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">ShuangYY</span> <span class="hljs-number">6</span> <span class="hljs-number">1098</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Xiamen</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">btALT</span> <span class="hljs-number">5</span> <span class="hljs-number">534</span><br><span class="hljs-number">3</span> <span class="hljs-variable">National</span> <span class="hljs-variable">Taiwan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">puyo</span> <span class="hljs-number">5</span> <span class="hljs-number">563</span><br><span class="hljs-number">4</span> <span class="hljs-variable">The</span> <span class="hljs-built_in">First</span> <span class="hljs-variable">Middle</span> <span class="hljs-variable">School</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Wuhu</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">WHYZ</span> <span class="hljs-number">5</span> <span class="hljs-number">652</span><br><span class="hljs-number">4</span> <span class="hljs-variable">Microsoft</span> <span class="hljs-variable">ATC</span> <span class="hljs-variable">Shanghai</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Core</span><span class="hljs-operator">-</span><span class="hljs-variable">Stop</span><span class="hljs-operator">-</span><span class="hljs-variable">Dump</span> <span class="hljs-number">5</span> <span class="hljs-number">729</span><br><span class="hljs-number">4</span> <span class="hljs-variable">Zhejiang</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Golden</span> <span class="hljs-variable">Keyboard</span> <span class="hljs-number">5</span> <span class="hljs-number">817</span><br><span class="hljs-number">5</span> <span class="hljs-variable">Peking</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-type">PKU_T2</span> <span class="hljs-number">5</span> <span class="hljs-number">819</span><br><span class="hljs-number">6</span> <span class="hljs-variable">Zhejiang</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Dasher</span> <span class="hljs-number">5</span> <span class="hljs-number">956</span><br><span class="hljs-number">6</span> <span class="hljs-variable">East</span> <span class="hljs-variable">China</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Redfield</span> <span class="hljs-number">4</span> <span class="hljs-number">325</span><br><span class="hljs-number">7</span> <span class="hljs-variable">Tsinghua</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">GotoFLY</span> <span class="hljs-number">4</span> <span class="hljs-number">367</span><br><span class="hljs-number">7</span> <span class="hljs-variable">Zhejiang</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">sago</span> <span class="hljs-number">4</span> <span class="hljs-number">392</span><br><span class="hljs-number">7</span> <span class="hljs-variable">National</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Defense</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Robust</span> <span class="hljs-number">4</span> <span class="hljs-number">438</span><br><span class="hljs-number">8</span> <span class="hljs-variable">Zhongshan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">ZSU</span><span class="hljs-operator">-</span><span class="hljs-variable">Tanglha</span> <span class="hljs-number">4</span> <span class="hljs-number">512</span><br><span class="hljs-number">9</span> <span class="hljs-variable">Tongji</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Revenge</span> <span class="hljs-number">4</span> <span class="hljs-number">559</span><br><span class="hljs-number">10</span> <span class="hljs-variable">Shanghai</span> <span class="hljs-variable">Jiao</span> <span class="hljs-variable">Tong</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">H</span><span class="hljs-operator">-</span><span class="hljs-built_in">E</span><span class="hljs-operator">-</span><span class="hljs-variable">A</span><span class="hljs-operator">-</span><span class="hljs-variable">T</span> <span class="hljs-number">4</span> <span class="hljs-number">600</span><br><span class="hljs-number">10</span> <span class="hljs-variable">Xidian</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">ACMore1</span> <span class="hljs-number">4</span> <span class="hljs-number">602</span><br><span class="hljs-number">11</span> <span class="hljs-variable">Wuhan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Moonmist</span> <span class="hljs-number">4</span> <span class="hljs-number">723</span><br><span class="hljs-number">12</span> <span class="hljs-variable">Zhongshan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-type">ZSU_Olympus</span> <span class="hljs-number">4</span> <span class="hljs-number">765</span><br><span class="hljs-number">12</span> <span class="hljs-variable">Nanjing</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Narcissus</span> <span class="hljs-number">4</span> <span class="hljs-number">774</span><br><span class="hljs-number">13</span> <span class="hljs-variable">Northwestern</span> <span class="hljs-variable">Polytechnical</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-number">1010</span> <span class="hljs-number">1100</span> <span class="hljs-number">4</span> <span class="hljs-number">845</span><br><span class="hljs-number">14</span> <span class="hljs-variable">Harbin</span> <span class="hljs-variable">Institute</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Gaminerie</span> <span class="hljs-number">3</span> <span class="hljs-number">200</span><br><span class="hljs-number">15</span> <span class="hljs-variable">Fudan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-built_in">White</span> <span class="hljs-operator">*</span> <span class="hljs-punctuation">[</span> <span class="hljs-variable">Bear</span> <span class="hljs-operator">+</span> <span class="hljs-variable">Dew</span> <span class="hljs-operator">+</span> <span class="hljs-variable">Cloud</span> <span class="hljs-punctuation">]</span> <span class="hljs-number">3</span> <span class="hljs-number">337</span><br><span class="hljs-number">15</span> <span class="hljs-variable">Zhongshan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">ZSU</span><span class="hljs-operator">-</span><span class="hljs-variable">Everest</span> <span class="hljs-number">3</span> <span class="hljs-number">360</span><br><span class="hljs-number">15</span> <span class="hljs-variable">Hefei</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Happy</span> <span class="hljs-built_in">For</span> <span class="hljs-variable">Unpain</span> <span class="hljs-variable">Teeth</span> <span class="hljs-number">3</span> <span class="hljs-number">406</span><br><span class="hljs-number">16</span> <span class="hljs-variable">Beijing</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Posts</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Telecommunications</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Neon</span> <span class="hljs-number">3</span> <span class="hljs-number">442</span><br><span class="hljs-number">17</span> <span class="hljs-variable">Shenzhen</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Aspire</span> <span class="hljs-number">3</span> <span class="hljs-number">453</span><br><span class="hljs-number">18</span> <span class="hljs-variable">Harbin</span> <span class="hljs-variable">Institute</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Corsair</span> <span class="hljs-number">3</span> <span class="hljs-number">457</span><br><span class="hljs-number">18</span> <span class="hljs-variable">Nanjing</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">backbones</span> <span class="hljs-number">3</span> <span class="hljs-number">461</span><br><span class="hljs-number">18</span> <span class="hljs-variable">South</span> <span class="hljs-variable">China</span> <span class="hljs-variable">Agricultural</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-type">scau_update</span> <span class="hljs-number">3</span> <span class="hljs-number">468</span><br><span class="hljs-number">19</span> <span class="hljs-variable">Huazhong</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">rodimus</span> <span class="hljs-number">3</span> <span class="hljs-number">480</span><br><span class="hljs-number">20</span> <span class="hljs-variable">Ningbo</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">ACHC</span> <span class="hljs-number">3</span> <span class="hljs-number">505</span><br><span class="hljs-number">21</span> <span class="hljs-variable">Peking</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-type">www_pku</span> <span class="hljs-number">3</span> <span class="hljs-number">513</span><br><span class="hljs-number">21</span> <span class="hljs-variable">Fuzhou</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">OrOrz</span> <span class="hljs-number">3</span> <span class="hljs-number">520</span><br><span class="hljs-number">22</span> <span class="hljs-variable">National</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Defense</span> <span class="hljs-variable">Technology</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Puzzle</span> <span class="hljs-number">3</span> <span class="hljs-number">520</span><br><span class="hljs-number">22</span> <span class="hljs-variable">Donghua</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Gespenst</span> <span class="hljs-number">3</span> <span class="hljs-number">535</span><br><span class="hljs-number">22</span> <span class="hljs-variable">Hunan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Footmen</span> <span class="hljs-number">3</span> <span class="hljs-number">535</span><br><span class="hljs-number">23</span> <span class="hljs-variable">Tianjin</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-type">TJU_Rocket</span> <span class="hljs-number">3</span> <span class="hljs-number">563</span><br><span class="hljs-number">24</span> <span class="hljs-variable">National</span> <span class="hljs-variable">Taiwan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">ABCDE</span> <span class="hljs-number">3</span> <span class="hljs-number">568</span><br><span class="hljs-number">24</span> <span class="hljs-variable">Nanjing</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Aeronautics</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Astronautics</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">ZipFish</span> <span class="hljs-number">3</span> <span class="hljs-number">575</span><br><span class="hljs-number">25</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Electronic</span> <span class="hljs-variable">Science</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Technology</span> <span class="hljs-variable">of</span> <span class="hljs-variable">China</span> <span class="hljs-operator">=&gt;</span><br><span class="hljs-variable">transistor</span> <span class="hljs-number">3</span> <span class="hljs-number">599</span><br><span class="hljs-number">26</span> <span class="hljs-variable">Shanghai</span> <span class="hljs-variable">Jiao</span> <span class="hljs-variable">Tong</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Lucifer</span> <span class="hljs-number">3</span> <span class="hljs-number">608</span><br><span class="hljs-number">26</span> <span class="hljs-variable">Zhengzhou</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-type">ZZU_cheapwine</span> <span class="hljs-number">3</span> <span class="hljs-number">650</span><br><span class="hljs-number">27</span> <span class="hljs-variable">Wuhan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Silence</span> <span class="hljs-number">3</span> <span class="hljs-number">685</span><br><span class="hljs-number">27</span> <span class="hljs-variable">Hangzhou</span> <span class="hljs-variable">Dianzi</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">MP3</span> <span class="hljs-number">3</span> <span class="hljs-number">687</span><br><span class="hljs-number">28</span> <span class="hljs-variable">Jinan</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">JNU</span><span class="hljs-operator">-</span><span class="hljs-variable">FLY</span> <span class="hljs-number">3</span> <span class="hljs-number">830</span><br><span class="hljs-number">29</span> <span class="hljs-variable">Huazhong</span> <span class="hljs-built_in">Normal</span> <span class="hljs-variable">University</span> <span class="hljs-operator">=&gt;</span> <span class="hljs-variable">Neptune</span> <span class="hljs-number">3</span> <span class="hljs-number">857</span><br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作<br>个回顾。<span class="hljs-variable">GCJ2006</span>，<span class="hljs-variable">ACM2005</span> 和<span class="hljs-variable">TCCC2006</span> 之后，<span class="hljs-number">2006</span> 年对于我来说是一个大丰<br>收，晚上发<span class="hljs-variable">ACM</span> 西安<span class="hljs-number">2006</span> 吧。<br><span class="hljs-number">2006</span> 年<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span><span class="hljs-punctuation">(</span>下<span class="hljs-punctuation">)</span>——古城西安<br>艰苦的<span class="hljs-variable">ACM2006</span> 上海赛区结束之后，我们原本以为清华会选择另外<span class="hljs-number">3</span> 支队伍<br>参加西安赛区的比赛。况且，大三的课程的实验任务很重，我们也就停止了计划的<br>定期训练。大概在<span class="hljs-number">25</span> 天之后，<span class="hljs-number">12</span> 月<span class="hljs-number">20</span> 日左右突然收到邬老师的通知，准备出发<br>参加<span class="hljs-variable">ACM</span> 西安赛区比赛。我们的<span class="hljs-number">2006</span> 西安之旅也就是在这比较仓促的准备中开<br>始的。<br>西安赛区之前，我们没有定下明确的目标，比赛过程中处处都采用了追求稳健<br>的方法，当时也是为了避免一年前的杭州悲剧重演。<br>西安的比赛没有太多兴奋的<span class="hljs-variable">AC</span>，没有惊心动魄的场面，所有过程都在类似旅<br>游的气氛中结束了。作为<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 的最后一战，这里也作一个简要的回顾吧。<br>由于这次题目又是<span class="hljs-variable">Srbga</span>（刘汝佳）命题的，我最后也顺便列举一下我总结的他命<br>题的特色吧。<br>比赛过程：<br><span class="hljs-number">2006</span> 年清华同样派出了<span class="hljs-number">3</span> 支队伍参加西安赛区，除了<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span>（我，<br><span class="hljs-variable">geworm</span><span class="hljs-punctuation">(</span>鬲融<span class="hljs-punctuation">)</span>和<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span><span class="hljs-punctuation">(</span>胡伟栋<span class="hljs-punctuation">)</span>）之外，还有<span class="hljs-variable">Panacea</span>（<span class="hljs-variable">OpenGL</span><span class="hljs-punctuation">(</span>唐文斌<span class="hljs-punctuation">)</span>，<span class="hljs-variable">zhy</span><span class="hljs-punctuation">(</span>周源<span class="hljs-punctuation">)</span><br>和<span class="hljs-variable">liuhe</span><span class="hljs-punctuation">(</span>刘贺<span class="hljs-punctuation">)</span>，如果你第一眼看见这个词就知道是什么意思，我相信您一定准备过<br><span class="hljs-variable">GRE</span> 吧？）以及一起参加过<span class="hljs-number">2006</span> 上海赛区比赛的<span class="hljs-variable">GotoFLY</span>（<span class="hljs-variable">zcgzcgzcg</span><span class="hljs-punctuation">(</span>朱晨光<span class="hljs-punctuation">)</span>，<br><span class="hljs-variable">wangjun</span><span class="hljs-punctuation">(</span>王俊<span class="hljs-punctuation">)</span>，<span class="hljs-variable">tedcn</span><span class="hljs-punctuation">(</span>龙凡<span class="hljs-punctuation">)</span>）。<br><span class="hljs-number">2006</span> 年冬天是我第一次来到西安，刚下火车就深深感受到了西安的古城气息。<br>到达宾馆之后，我们做得第一件事情就是玩，印象很深的是钟楼，鼓楼还有大雁塔。<br>我们做的最主要的事情可以用<span class="hljs-variable">GotoFLY</span> 的<span class="hljs-number">4</span> 个大写字母<span class="hljs-variable">GFLY</span> 来表示，就是“公<br>费旅游”。<br>比赛之前的晚上，我们认真讨论了比赛中采用的策略，参加西安赛区没有太多<br>传统强队，我们一致觉得应该优先采用比较稳健的策略。赛后有比较简短的总结：<br>按照一贯的方法，鬲融从<span class="hljs-variable">A</span> 开始读，胡伟栋从<span class="hljs-variable">J</span> 开始读，我准备编程的环境，<br>然后从中间选择题目读。与上海赛区相比，比较顺利的是我一下就看到了一道比较<br>简单的题目<span class="hljs-variable">B</span>，于是我马上写了<span class="hljs-variable">B</span> 题。<br><span class="hljs-variable">B</span>：使用火柴棒拼接数字，给定<span class="hljs-variable">n</span><span class="hljs-operator">,</span><span class="hljs-variable">m</span>，求使用不超过<span class="hljs-variable">n</span> 根火柴棒拼成的<span class="hljs-variable">m</span> 的倍<br>数中最大的数字。<br>本题主要的思想是动态规划，方程很容易得出，时间复杂度<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">nm</span><span class="hljs-operator">*</span><span class="hljs-number">10</span><span class="hljs-punctuation">)</span>。但是<br>本题有两个难点：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span>如何得到最大的数字？标准的方法是使用<span class="hljs-variable">BFS</span>，搜索的过程中必须非常注意<br>搜索的顺序，但是这样实现很容易出错。我注意到了<span class="hljs-variable">n</span><span class="hljs-operator">&lt;=</span><span class="hljs-number">100</span> 的条件，因此结果不<br>会超过<span class="hljs-number">50</span> 位，于是我使用<span class="hljs-number">3</span> 个<span class="hljs-variable">int64</span> 来保存结果，这样既实现简单又不容易错。虽<br>然程序常数比较大，但是不至于导致超时。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span>不能不使用火柴棒，而数字<span class="hljs-number">0</span> 也需要火柴棒来拼成。例如<span class="hljs-variable">n</span><span class="hljs-operator">=</span><span class="hljs-number">5</span>，<span class="hljs-variable">m</span><span class="hljs-operator">=</span><span class="hljs-number">97</span> 的结<br>果是<span class="hljs-operator">-</span><span class="hljs-number">1</span>，而<span class="hljs-variable">n</span><span class="hljs-operator">=</span><span class="hljs-number">6</span>，<span class="hljs-variable">m</span><span class="hljs-operator">=</span><span class="hljs-number">97</span> 的结果是<span class="hljs-number">0</span>。<br><span class="hljs-variable">ACM</span> 比赛的第一题的选择对比赛的进程影响很大，此次比赛很成功地使用了<br>很稳妥的算法。<br><span class="hljs-built_in">E</span>：标准的课堂睡觉问题，求最早所有人不睡觉的时间。<br>简单的模拟题，而且时限很宽松。<br><span class="hljs-built_in">E</span> 其实是最简单题目，但是由于我的低级错误，不仅得到了一次罚时，而且浪<br>费了宝贵的时间。好在当时比较冷静，很快改正了错误。<br><span class="hljs-built_in">D</span>：对于一个不超过<span class="hljs-number">100</span><span class="hljs-operator">*</span><span class="hljs-number">100</span><span class="hljs-operator">=</span><span class="hljs-number">10000</span> 的表达式，可以在其中加入<span class="hljs-operator">*</span>来表示任何<br>字符，如果一个表达式只能和唯一的等式对应，则称为<span class="hljs-variable">A</span> 类表达式。给定一个表<br>达式<span class="hljs-variable">B</span>，要求通过改变最少的字符使它变成<span class="hljs-variable">A</span> 类表达式。<br>本题使用了一次搜索再检索的方法，可以有效控制程序的速度。估计时限问题<br>后选择先提交节省了不少时间。<br><span class="hljs-variable">J</span>：给定一个<span class="hljs-number">4</span><span class="hljs-operator">*</span><span class="hljs-number">4</span> 的网格的边框图形，问是否可以通过在<span class="hljs-number">4</span><span class="hljs-operator">*</span><span class="hljs-number">4</span> 的网格上放<span class="hljs-number">6</span> 个<br><span class="hljs-number">2</span><span class="hljs-operator">*</span><span class="hljs-number">2</span> 的正方形框得到。<br><span class="hljs-variable">H</span>：给定一组旋转后的乐谱及初始音符及结束音符，求原始的音符序列。<br>开始胡伟栋没有看到旋转的角度是整数的条件，于是推出了可以解决实数角度<br>的数学公式。但是由于公式需要考虑的情况比较复杂，幸运的是我们使用了枚举角<br>度再判断的方法。<br>写了读入部分之后，看到<span class="hljs-variable">Panacea</span> 过了<span class="hljs-variable">H</span> 题。鬲融重新读了题目，发现了角度是整<br>数的条件，于是稍微修改就得到了正确的程序。<br>本题需要判断的条件很多，需要考虑得很仔细：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> 先把坐标按照<span class="hljs-variable">X</span>排序。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> 通过初始音符及结束音符得到<span class="hljs-variable">sd</span>，判断<span class="hljs-variable">sd</span> 是否在<span class="hljs-number">1</span> 到<span class="hljs-number">5</span> 之间。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> 判断相邻两个字符的距离是否在<span class="hljs-variable">sd</span> 到<span class="hljs-number">5</span><span class="hljs-variable">sd</span> 之间。<br><span class="hljs-punctuation">(</span><span class="hljs-number">4</span><span class="hljs-punctuation">)</span> 判断每个点的坐标是否可以对应一个音符。<br><span class="hljs-variable">F</span>：求<span class="hljs-number">3</span> 维空间的<span class="hljs-variable">Voronoi</span> 图，输出每个<span class="hljs-variable">Voronoi</span> 块体积占的比例。<br>胡伟栋提出了本题的正确算法：分割立方体。如果一个立方体的<span class="hljs-number">8</span> 个顶点都到<br>一个点最近，那么这个矩形内的所有点都到这个点最近，否则就分割这个立方体，<br>直到立方体的体积少到一定程度为止。<br>开始程序的精度不够，后来胡伟栋提出了一个启发式的分割立方体的方法，思<br>想就是使得两个立方体的分割面以尽量大的概率穿过<span class="hljs-variable">Vorinoi</span> 平面。程序的效果很<br>好，而且那时时限也已经放宽，于是顺利通过了<span class="hljs-variable">F</span> 题。其实本题蒙特卡罗法也可<br>以过，我们也想到了这个方法，但是由于随机过程写的效果有问题，导致精度不够。<br>通过<span class="hljs-variable">F</span> 题的时间是<span class="hljs-number">270</span> 分钟，封版时除了<span class="hljs-variable">Panacea</span> 通过<span class="hljs-number">4</span> 题，其他队伍最多只<br>有<span class="hljs-number">3</span> 题。当时<span class="hljs-variable">Panacea</span> 正好坐在我们背后，很可惜他们卡在了<span class="hljs-built_in">D</span> 和<span class="hljs-variable">G</span> 上，最终也<br>只有<span class="hljs-number">4</span> 题。最后半小时我们也没有尝试<span class="hljs-variable">H</span> 或者<span class="hljs-variable">A</span>，因为其他队伍很难在最后一小<br>时通过<span class="hljs-number">4</span> 题。我们就简单尝试了几次<span class="hljs-built_in">C</span> 就默默地等待着西安赛区比赛的结束。<br>最终我们通过<span class="hljs-number">6</span> 题排名第一，由于已经获得了上海赛区的冠军，不参加<span class="hljs-variable">ICPC</span><br>的排名，不过仍然获得了<span class="hljs-variable">Solaris</span> 杯。<br>总结：<br>西安的<span class="hljs-variable">ICPC</span> 冠军是北京大学的<span class="hljs-variable">T2</span>（<span class="hljs-variable">rainer</span>，<span class="hljs-variable">dzx</span> 和<span class="hljs-variable">cici</span>），后来他们依靠西安<br>的夺冠成绩进入了<span class="hljs-number">2007</span> 年的全球总决赛。<span class="hljs-variable">T2</span> 在最后一小时表现极其神勇，顺利通<br>过<span class="hljs-number">2</span> 题一举超过了<span class="hljs-variable">GotoFly</span> 和<span class="hljs-variable">Panacea</span>，而且最后几分钟还很有希望通过<span class="hljs-variable">H</span>，赛后<br>和<span class="hljs-variable">rainer</span> 讨论之后发现算法相差无几，可能就是一些小细节缺陷吧。<span class="hljs-number">2006</span><span class="hljs-operator">-</span><span class="hljs-number">2007</span> 年<br>度的<span class="hljs-variable">ACM</span> 比赛，从上海到西安，还有东京的总决赛，<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 每次比赛都能<br>看到了<span class="hljs-variable">T2</span> 熟悉的身影。我们在封版之后常常由于压力较大很难攻破题目，他们在<br>封版之后的冷静心态非常值得我们的学习。<br><span class="hljs-variable">GotoFly</span> 与<span class="hljs-variable">T2</span> 一样通过<span class="hljs-number">5</span> 题，由于<span class="hljs-number">5</span> 分钟的罚时劣势位居第三，<span class="hljs-variable">Panacea</span> 通过<span class="hljs-number">4</span><br>题依靠罚时优势排在第四。两队都欠缺一些运气，很可惜。另外印象很深的是，坐<br>在对面的朝鲜队通过了<span class="hljs-number">4</span> 题在<span class="hljs-variable">ICPC</span> 中排名第<span class="hljs-number">2</span>，如果西安能够多一个名额的话，<br>他们就能够出现在总决赛赛场了。<br>西安赛区是<span class="hljs-variable">Srbga</span>（刘汝佳）出的题目，从高中时期就开始做了<span class="hljs-variable">Srbga</span> 出的题<br>目，西安赛区的题目又一次体现出了刘汝佳命题的许多重要特色：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> 如果<span class="hljs-variable">Srbga</span> 大哥出是一套题目，那么你会明显觉得题目拿在手上明显重一<br>些。<span class="hljs-variable">Srbga</span> 大哥出题很重视题目描述或者故事的完整性，他很少使用一些僵<br>硬的题目模型和描述。有时读着他出的题目更像是在读小说，欣赏故事。<br>当然，由于<span class="hljs-variable">Srbga</span> 大哥出的题目描述完整，刚拿到题目的时候会感觉很难<br>上手。我们很容易发现没有一道题目容易上手。用数据表达，比赛开始时<br>的空机时间偏长。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">Srbga</span> 大哥出的题目和世界总决赛的题目风格近似，题目多半对编程能力<br>提出很高的要求，相比之下对算法的要求不是非常高，考察的都是比较基<br>本的算法。如果用一个字形容就是：野。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">Srbga</span> 大哥出的题目对算法的考察范围非常广，虽然对于某特殊的算法要<br>求不高。有时还需要很强的组合算法能力。<br><span class="hljs-punctuation">(</span><span class="hljs-number">4</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">Srbga</span> 大哥出的题目中很注意数据的设计，例如<span class="hljs-built_in">C</span> 题中特别生成了极端的<br>情况，<span class="hljs-variable">J</span> 则使用了接近<span class="hljs-number">20000</span> 组数据。一般情况下，不经过精心设计的随机<br>算法会吃尽苦头。<br><span class="hljs-number">2006</span> 年的<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 的<span class="hljs-variable">ACM</span> 分区赛比赛任务已经全部结束了，<span class="hljs-number">2006</span> 对于<br><span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 来说是丰收的一年，我们圆梦了上海和西安的双冠军。在随后的冬天，<br>我们加紧训练准备东京的总决赛。<br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个<br>回顾。回顾了<span class="hljs-variable">GCJ2006</span> 和<span class="hljs-number">2005</span> 年的<span class="hljs-variable">ACM</span> 之后，转向<span class="hljs-variable">TopCoder</span> 的比赛吧。我参加<br>的最早的<span class="hljs-variable">TopCoder</span> 赛事是<span class="hljs-variable">TCCC2006</span>。<br><span class="hljs-variable">TCCC2006</span>——死亡之组<br><span class="hljs-variable">TopCoder</span> <span class="hljs-variable">Collegiate</span> <span class="hljs-variable">Challenge</span><span class="hljs-punctuation">(</span>简称<span class="hljs-variable">TCCC</span><span class="hljs-punctuation">)</span>是<span class="hljs-variable">TopCoder</span> 一般在秋季举行的面向全<br>世界在校学生的程序设计大赛，<span class="hljs-number">2006</span> 年的<span class="hljs-variable">TCCC</span> 在圣地亚哥举行。从北京到旧金山<br>的飞行只需要<span class="hljs-number">11</span> 个小时左右，所以不至于那么疲劳。路上一切都很顺利，很感谢<br><span class="hljs-variable">OpenGL</span> 的提醒，对于超过<span class="hljs-number">8</span> 个小时飞行自带拖鞋和枕头对我来说还是很重要的。<br><span class="hljs-variable">TCCC2006</span> 使用的标准的<span class="hljs-variable">TopCoder</span> 现场比赛形式，比赛有<span class="hljs-number">48</span> 名选手参加，首<br>先<span class="hljs-number">48</span> 名选手被分为<span class="hljs-number">16</span> 个人一组，每组分别进行半决赛，前<span class="hljs-number">2</span> 名直接晋级决赛，<span class="hljs-number">3</span><span class="hljs-operator">-</span><br><span class="hljs-number">6</span> 名晋级<span class="hljs-variable">wildcard</span> 比赛，<span class="hljs-variable">wildcard</span> 比赛<span class="hljs-number">12</span> 人中的前两名填补决赛的最后<span class="hljs-number">2</span> 个名额，<br>决赛由<span class="hljs-number">8</span> 个选手参加。<span class="hljs-variable">TopCoder</span> 现场比赛中很重要的一个创新是：每名比赛选手<br>在观众席前都有一个同步的显示器，这样观众可以看到选手任何时刻做的事情，极<br>大增强了互动性。<br><span class="hljs-variable">TCCC2006</span> 的<span class="hljs-variable">Room</span> <span class="hljs-number">1</span> 和后面的<span class="hljs-variable">Final</span> <span class="hljs-built_in">Round</span> 都可谓是死亡之组。现在就回忆一<br>下这两场激烈的比赛吧。<br><span class="hljs-variable">Room</span> <span class="hljs-number">1</span>：<br>至于<span class="hljs-number">3</span> 个房间的分配，<span class="hljs-variable">TopCoder</span> 按照注册截止时选手的<span class="hljs-variable">Rating</span> 分布蛇形分配。<br>但是<span class="hljs-variable">TCCC2006</span> 的房间实力分布极不平衡，我与上届冠军<span class="hljs-variable">tomek</span>，著名选手<span class="hljs-variable">reid</span>，<br><span class="hljs-variable">Egor</span>，<span class="hljs-variable">halyavin</span> 还有<span class="hljs-variable">Rating</span> 不高但是实力极强的<span class="hljs-variable">Ying</span> 和<span class="hljs-variable">ardiankp</span> 同被分到了<span class="hljs-variable">Room</span><br><span class="hljs-number">1</span>，赛前<span class="hljs-variable">Room</span> <span class="hljs-number">1</span> 成为公认的死亡之组。<br>在圣地亚哥，我和师兄<span class="hljs-variable">Macsy</span>（张一飞）同一个房间，很感谢师兄的关心，我<br>那几天休息的都很好。要知道如果同房的人有<span class="hljs-number">10</span> 小时左右的时差的话，一人必须<br>很小心才能保证不影响另一人的休息。<br><span class="hljs-variable">Room</span> <span class="hljs-number">1</span> 在我抵达美国的第二天早上进行，选手允许提前<span class="hljs-number">30</span> 分钟准备一些必要<br>代码。不过现在大家都比较喜欢学习<span class="hljs-variable">Petr</span> 那样一行代码都不打。下面就是比赛的<br>过程：<br><span class="hljs-number">250</span> 分题目是：给定<span class="hljs-variable">n</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n</span><span class="hljs-operator">&lt;=</span><span class="hljs-number">50</span><span class="hljs-punctuation">)</span>个整数<span class="hljs-variable">AI</span> 和一个阈值<span class="hljs-variable">d</span>，计算<span class="hljs-variable">n</span> 个整数所有排列<br><span class="hljs-variable">PI</span> 中满足<span class="hljs-operator">|</span><span class="hljs-variable">API</span><span class="hljs-operator">-</span><span class="hljs-variable">API</span><span class="hljs-operator">+</span><span class="hljs-number">1</span><span class="hljs-operator">|&lt;=</span><span class="hljs-variable">d</span> 的排列中，所有不同可能<span class="hljs-variable">AP1</span> 的个数。这题最标准的方法是<br>动态规划，基本思想是把<span class="hljs-variable">n</span> 个整数排序之后，计算两条相邻元素不超过<span class="hljs-variable">d</span> 的序列。<br>我使用了一种更精巧的算法，把<span class="hljs-variable">n</span> 个整数排序之后，对于<span class="hljs-variable">AI</span>，如果<span class="hljs-variable">AI</span> 可能作为排<br>列的第一个元素，那么<span class="hljs-variable">AI</span> 必定在某一个方向（大小）连续而在另一个方向每间隔<br>两个元素相连。这个算法比较容易实现，但是正确性证明比较难，甚至让人第一感<br>觉是错的。我写完程序测试了所有样例都正确就提交了，<span class="hljs-number">243</span> 分。提交之后我又测<br>试了许多数据，并在纸上尝试证明正确性。<br>赛后，我看了网络上的讨论记录。在我提交<span class="hljs-number">250</span> 分题之后，立刻遭到了<span class="hljs-variable">misof</span><br>的怀疑，他认为我的算法有问题。据<span class="hljs-variable">Macsy</span> 学长的回忆，<span class="hljs-variable">OpenGL</span> 在我屏幕前看我<br>写完程序，也认为我的算法是错的，不过后来他们讨论之后发现没有反例。<br>关掉<span class="hljs-number">250</span> 分题目之后，我刚刚意识到<span class="hljs-variable">Room</span> <span class="hljs-number">1</span> 的<span class="hljs-number">3</span> 题分数不是<span class="hljs-number">250</span><span class="hljs-operator">-</span><span class="hljs-number">500</span><span class="hljs-operator">-</span><span class="hljs-number">1000</span>，<br>而是<span class="hljs-number">250</span><span class="hljs-operator">-</span><span class="hljs-number">600</span><span class="hljs-operator">-</span><span class="hljs-number">900</span>。现在看来，对于<span class="hljs-number">250</span> 比较顺利的情况，应该先做<span class="hljs-number">500</span>，若<span class="hljs-number">250</span><br>不顺利或者想出奇制胜的话，可以先开<span class="hljs-number">1000</span> 分。当时没有什么经验，我认为<span class="hljs-number">900</span><br>比<span class="hljs-number">600</span> 应该简单一些，于是就打开了<span class="hljs-number">900</span>。<br><span class="hljs-number">900</span> 分题目是：给定一张<span class="hljs-variable">n</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n</span><span class="hljs-operator">&lt;=</span><span class="hljs-number">10</span><span class="hljs-punctuation">)</span>个点的带权有向完全图（也就是<span class="hljs-variable">n2</span> 个实数）<br>和一个衰减系数<span class="hljs-variable">p</span>，求一条经过<span class="hljs-variable">d</span><span class="hljs-punctuation">(</span><span class="hljs-variable">d</span><span class="hljs-operator">&lt;=</span><span class="hljs-number">10</span><span class="hljs-punctuation">)</span>条边路径（不需要保证简单路径），要求<br>这条路径的指数衰减长度（指数衰减是指第<span class="hljs-variable">i</span> 段的长度乘以<span class="hljs-variable">pi</span><span class="hljs-operator">-</span><span class="hljs-number">1</span> 然后求和）最接近<br><span class="hljs-number">1000</span>。这题如果使用穷举法，就需要<span class="hljs-number">1010</span> 左右的计算量，在<span class="hljs-variable">TopCoder</span> 的测试机上<br>也不能通过，由于路径长度很容易超过<span class="hljs-number">1000</span>，所以很难找到多项式时间的动态规<br>划。我马上有了一个想法——双向搜索。对于长度为<span class="hljs-variable">d</span> 的路径，其实可以看作从<br>某一个点<span class="hljs-variable">p</span> 出发的一条反向的长度<span class="hljs-punctuation">[</span><span class="hljs-variable">d</span><span class="hljs-operator">/</span><span class="hljs-number">2</span><span class="hljs-punctuation">]</span>的路径和一条正向的<span class="hljs-variable">d</span><span class="hljs-operator">-</span><span class="hljs-punctuation">[</span><span class="hljs-variable">d</span><span class="hljs-operator">/</span><span class="hljs-number">2</span><span class="hljs-punctuation">]</span>的路径，对于<br>固定的节点<span class="hljs-variable">v</span> 来说，这种两个方向的路径都不超过<span class="hljs-variable">n</span><span class="hljs-punctuation">[</span><span class="hljs-variable">d</span><span class="hljs-operator">/</span><span class="hljs-number">2</span><span class="hljs-punctuation">]</span>，这样只要枚举一个方向<br>的路径然后二分查找另一个方向即可。复杂度是<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">dn2</span><span class="hljs-operator">+</span><span class="hljs-punctuation">[</span><span class="hljs-variable">d</span><span class="hljs-operator">/</span><span class="hljs-number">2</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">)</span> 。<br>现场比赛调试环境不是很好，我花了不少时间调试以发现程序中的错误。提<br>交之后<span class="hljs-number">690</span> 多分，还不到<span class="hljs-number">700</span>。不过对于<span class="hljs-number">900</span> 分的题目在那种压力下还可以接受。<br>提交之后我花了<span class="hljs-number">15</span> 分钟左右测试，没有发现错误。于是就准备做<span class="hljs-number">600</span> 了。<br><span class="hljs-number">600</span> 分题目是：一道经典的数学题，给定一些盘子叠放的规则，计算顶层盘子<br>的最大可能大小。其实算法不是很难，只要二分顶层盘子的大小，然后依次贪心计<br>算来判断底层是否能够满足即可。只是贪心的时候要考虑两种情况，一时想不清楚。<br>我当时已经感觉很疲劳，思路不是很清楚，最后<span class="hljs-number">40</span> 分钟时间也没能调试通过。这<br>题过于琐碎，<span class="hljs-variable">Room</span> <span class="hljs-number">1</span> 中最终没有选手通过<span class="hljs-number">600</span> 分题，并且成就了一个刺激的<br><span class="hljs-variable">Challenge</span> 阶段。<br><span class="hljs-variable">Coding</span> 阶段我和<span class="hljs-variable">tomek</span> 采用了截然不同的策略，我跳过<span class="hljs-number">600</span> 直攻<span class="hljs-number">900</span>，而<br><span class="hljs-variable">tomek</span> 在<span class="hljs-number">600</span> 中挣扎了很长时间才放弃。<span class="hljs-variable">Coding</span> 阶段结束时，有<span class="hljs-number">4</span> 名选手提交了<span class="hljs-number">3</span><br>题。我依靠速度优势领先同样提交<span class="hljs-number">250</span> 和<span class="hljs-number">900</span> 的<span class="hljs-variable">tomek</span> <span class="hljs-number">35</span> 分左右。<br><span class="hljs-variable">Challenge</span> 阶段开始时，我盲<span class="hljs-variable">cha</span>（<span class="hljs-variable">blind</span> <span class="hljs-variable">challenge</span>）了一个最后时刻提交的<span class="hljs-number">900</span><br>分程序，但是由于我选择的数据实在太弱，失去了<span class="hljs-number">25</span> 分。这样我和后面的<span class="hljs-variable">tomek</span><br>只相差<span class="hljs-number">10</span> 分左右了，所以我决定只要<span class="hljs-variable">tomek</span> 不动，我也不动了。其实，当时<br><span class="hljs-variable">tomek</span> 已经知道自己的<span class="hljs-number">900</span> 是错的，<span class="hljs-variable">Challenge</span> 阶段他估计已经放弃了。我的<br><span class="hljs-variable">Challenge</span> 阶段最终就以<span class="hljs-operator">-</span><span class="hljs-number">25</span> 分结束。<br>之后的<span class="hljs-variable">Challenge</span> 就是<span class="hljs-variable">Ying</span>（王颖）展现勇气和智慧的舞台了。他<span class="hljs-variable">Challenge</span> 掉<br>了所有提交的<span class="hljs-number">600</span>，凭借<span class="hljs-number">225</span> 分的加分超过了我，排在榜首。这样比赛的形式也一<br>目了然了，<span class="hljs-number">7</span> 位选手提交了<span class="hljs-number">900</span>，我依靠速度优势领先第四名<span class="hljs-variable">reid</span> 超过<span class="hljs-number">100</span> 分。只<br>要我两道题目能够<span class="hljs-variable">Passed</span> <span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 就足以进入<span class="hljs-variable">Final</span> <span class="hljs-built_in">Round</span> 了。<br><span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 之前，我和<span class="hljs-variable">Ying</span> 讨论他“超神”的<span class="hljs-variable">Challenge</span> 阶段。这是我第一次<br>参加<span class="hljs-variable">TopCoder</span> 的现场比赛，发现<span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 结果显示是按照<span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 之前的<br>排名倒序进行的。测试到我时，除了<span class="hljs-variable">tomek</span> 的<span class="hljs-number">4</span> 名选手的<span class="hljs-number">900</span> 都过了。显示我的<br>结果时，两个绿框闪烁了很久终于显示出了两个大大的钩，我终于可以欢呼庆祝胜<br>利了。我前面的<span class="hljs-variable">Ying</span> 也两题全过了。这样我们两位中国选手得以在死亡之组携手<br>出现，这场比赛真可谓是中国选手的胜利。<span class="hljs-variable">Reid</span> 只能在<span class="hljs-variable">Wildcard</span> 赛再作努力，<br><span class="hljs-variable">tomek</span> 则被直接淘汰出局了。<br><span class="hljs-variable">Final</span> <span class="hljs-built_in">Round</span>：<br>接下来的两天里，我观看了<span class="hljs-variable">Room2</span>，<span class="hljs-variable">Room3</span> 和<span class="hljs-variable">Wildcard</span> 的比赛。第<span class="hljs-number">2</span> 天晚上<br>我们参加了<span class="hljs-variable">TopCoder</span> 赞助的<span class="hljs-variable">Laser</span> <span class="hljs-variable">Tag</span> 游戏，我们所有中国人组成了一队，我的发<br>挥很差，原因是这个游戏与<span class="hljs-variable">CS</span> 不同，选手头上没有感光器，而我喜欢遇到人就攻<br>击头部，所以狭路相逢多半是我失败。活动中，我有幸结识了许多<span class="hljs-variable">Dev</span> 的神人，<br>当时由于<span class="hljs-variable">vividmxx</span> 没有参加，<span class="hljs-variable">magicpig</span> 和<span class="hljs-variable">PE</span> 的竞争很激烈，最终<span class="hljs-variable">PE</span> 获得了“浙江<br>大学建校<span class="hljs-number">100</span> 年来第一个<span class="hljs-variable">TCCC</span> 冠军”。记得赛后我<span class="hljs-variable">uncle</span> 来到现场，我<span class="hljs-variable">uncle</span> 是<br>浙江大学本科毕业的，<span class="hljs-variable">magicpig</span> 见我<span class="hljs-variable">uncle</span> 第一句话就是“浙江大学建校有<span class="hljs-number">100</span> 年<br>历史了吧？”汗死了。另外<span class="hljs-variable">zjq</span> 也获得了<span class="hljs-variable">Design</span> 的亚军。<br>第三天中午<span class="hljs-variable">Championship</span> <span class="hljs-built_in">Round</span> 开始了。决赛时，场地里安装了很多摄像头，<br>可以说我们的任何举动都在严密监视下了。这回我提前确认了题目分数是标准的<br><span class="hljs-number">250</span><span class="hljs-operator">-</span><span class="hljs-number">500</span><span class="hljs-operator">-</span><span class="hljs-number">1000</span> 的分布。参加决赛的选手除我之外有：<span class="hljs-variable">andrewzta</span>，<span class="hljs-variable">ardiankp</span>，<span class="hljs-variable">bmerry</span>，<br><span class="hljs-variable">Eryx</span>，<span class="hljs-variable">mathijs</span>，<span class="hljs-variable">Petr</span> 和<span class="hljs-variable">Ying</span>。面对决赛选手的实力，我已经没有意义定一个类似于<br>“保几争几”的目标了，努力发挥自己的水平是最应该做的。下面就是比赛的过程<br>了：<br><span class="hljs-number">250</span> 分题目是：给定<span class="hljs-variable">n</span> 个正三角形，每个顶点都有数字，选出<span class="hljs-number">6</span> 个三角形拼成<br>一个正六边形，要求相邻的数字必须相同。三角形允许旋转，计算能够得到多少个<br>本质不同的正六边形。题目很长，我仔细读了两遍才开始写，算法很清楚，就是枚<br>举六边形中心和四周的<span class="hljs-number">7</span> 个数字，然后判断是否有足够的三角形。在判断本质不<br>同的时候犯了一个错误，调试了几分钟，提交之后只有<span class="hljs-number">215</span> 分了，看了一下排名，<br><span class="hljs-variable">Petr</span> 有<span class="hljs-number">232</span> 分之高，其他选手都还没有提交。测试了几分钟发现程序的运行时间不<br>是很稳健，很容易到达<span class="hljs-number">0.8</span> 秒左右，测试了<span class="hljs-number">15</span> 分钟之多才逐渐放心下来，因为基<br>本上所有数据都<span class="hljs-number">0.8</span> 秒左右。赛后<span class="hljs-variable">Macsy</span> 告诉我，我的程序速度瓶颈是在<span class="hljs-variable">set</span> 的判<br>断，所以时间比较稳定，不会超时。我当时的犹豫和没有经验浪费了至少<span class="hljs-number">20</span> 分钟<br>的时间。<br>按照赛前的计划，我这时应该打开<span class="hljs-number">1000</span> 的题目的，但是由于自己对<span class="hljs-number">250</span> 没有<br>信心，而且求稳思想比较重，我先打开了<span class="hljs-number">500</span> 分的题目。现在看来，开<span class="hljs-number">500</span> 分的<br>题目并不算错误，其实在打开<span class="hljs-number">500</span> 分题目的时候，与<span class="hljs-variable">Petr</span> 的差距不是很大。<br><span class="hljs-number">500</span> 分题目是：给定一个机器人的移动命令序列，要求计算结束时机器人的位<br>置。由于移动序列中允许<span class="hljs-punctuation">(</span><span class="hljs-punctuation">)</span>这样的重复操作，直接模拟是超时的。这类题目的标准<br>算法是利用矩阵乘法，由于之前对于此类题目没有经验，没有准备好就开始写了，<br>导致矩阵处理失败。我果断放弃了调试，换用一种记录中间结果的搜索方法，写完<br>的时候已经只有<span class="hljs-number">280</span> 分了。更重要的是我已经没有时间进攻<span class="hljs-number">1000</span> 分了。提交之后<br>排在第<span class="hljs-number">3</span>，前面是<span class="hljs-variable">Petr</span> 和<span class="hljs-variable">Eryx</span>。<br><span class="hljs-number">1000</span> 分题目是：给出一个排队取菜的模型，计算一个等待时间的排队序列。<br>而且对于多种答案的情况，要求计算字典序最小的序列。题目其实不是很复杂，集<br>合动态规划就可以解决，不过模拟取菜过程时需要非常注意细节。<span class="hljs-variable">Petr</span> 提交了一个<br><span class="hljs-number">660</span> 分左右的程序，<span class="hljs-variable">Ying</span> 则在最后一分钟提交了<span class="hljs-number">400</span><span class="hljs-operator">+</span>分，排在第<span class="hljs-number">2</span>。<br><span class="hljs-variable">Challenge</span> 阶段显得很枯燥无味，前两天大发神威的<span class="hljs-variable">Ying</span>（<span class="hljs-operator">+</span><span class="hljs-number">225</span>）和<span class="hljs-variable">Petr</span><br>（<span class="hljs-operator">+</span><span class="hljs-number">300</span>）都没有尝试<span class="hljs-variable">Challenge</span>，整个<span class="hljs-variable">Challenge</span> 阶段没有任何一个<span class="hljs-variable">Successful</span><br><span class="hljs-variable">Challenge</span>。<br><span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 结果出来了，在<span class="hljs-variable">bmerry</span>，<span class="hljs-variable">ardiankp</span> 和<span class="hljs-variable">andrewzta</span> 都只通过一题的结<br>果出来之后，排在我后面的<span class="hljs-variable">mathijs</span> 两题都<span class="hljs-variable">Pass</span>，随后我的<span class="hljs-number">250</span> 和<span class="hljs-number">500</span> 也都<span class="hljs-variable">Pass</span> 了。<br>但是，排名在我之前的<span class="hljs-variable">Eryx</span> 和<span class="hljs-variable">Ying</span> 的<span class="hljs-number">500</span> 分和<span class="hljs-number">1000</span> 分都<span class="hljs-variable">Failed</span> <span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 了，<br>我瞬间提升到了第二名的位置。不过虽然<span class="hljs-variable">Petr</span> 的<span class="hljs-number">1000</span> 分挂了，但是他依旧凭借<br><span class="hljs-number">250</span> 和<span class="hljs-number">500</span> 的速度获得了冠军。<br>在这里说一下<span class="hljs-number">1000</span> 分的真实情况吧，因为这些时间来对于<span class="hljs-variable">TCCC2006</span> <span class="hljs-variable">Final</span><br><span class="hljs-built_in">Round</span> 的<span class="hljs-number">1000</span> 分题目有很多不同的说法。比赛结果中显示没有选手通过<span class="hljs-number">1000</span> 分题，<br>如果仔细分析测试结果，<span class="hljs-variable">Petr</span> 的程序由于超时出错，而<span class="hljs-variable">Ying</span> 的程序由于一个地方<br>没有清<span class="hljs-number">0</span> 而导致错误，确实很可惜。因为如果<span class="hljs-variable">Ying</span> 的<span class="hljs-number">1000</span> 能够<span class="hljs-variable">Pass</span> 的话，他将<br>是<span class="hljs-variable">TCCC</span> 的冠军。不过<span class="hljs-variable">Ying</span> 的算法犯了与造成<span class="hljs-variable">Petr</span> 超时一样的错误，他们的动态<br>规划程序比标准方法多出一个<span class="hljs-variable">n</span> 倍的时间，我曾经成功生成了一个用例，可以让<br><span class="hljs-variable">Ying</span> 和<span class="hljs-variable">Petr</span> 的程序都超时，这个例子已经得到了<span class="hljs-variable">Ying</span> 的认可。需要指出的是<br><span class="hljs-variable">TCCC2006</span> 是<span class="hljs-variable">TopCoder</span> 的测试机的速度还是很慢的，两个程序如果在现在的机子上<br>运行可能只需要<span class="hljs-number">1</span> 秒左右了。<br>比赛之后和<span class="hljs-variable">uncle</span> 到<span class="hljs-variable">downtown</span> 游玩了一下，参加完颁奖晚会，第二天就回国<br>了。<br>总结：<br><span class="hljs-variable">TCCC2006</span> 是我第一次参加<span class="hljs-variable">TopCoder</span> 的现场比赛，很有幸能够在这么多的第一<br>次中就进入决赛并且获得第<span class="hljs-number">2</span> 名的成绩。很感谢同参加比赛的同学<span class="hljs-variable">Macsy</span>，<br><span class="hljs-variable">OpenGL</span>，<span class="hljs-variable">Ying</span> 还有<span class="hljs-variable">PMH</span> 的关心和帮助，你们在我比赛时全程在场边，让我感觉很<br>温暖。<br>另外，我还有幸认识了<span class="hljs-variable">visualage</span>，现在他已经是<span class="hljs-variable">arena</span> 的负责人了吧。记得他<br>和<span class="hljs-variable">OpenGL</span> 在<span class="hljs-variable">Room</span> <span class="hljs-number">1</span> 的<span class="hljs-variable">Challenge</span> 阶段通过大声叫中文（在国外，这是最好的密码）<br>告诉我<span class="hljs-variable">tomek</span> 的<span class="hljs-number">900</span> 是错的，可惜我没有听见。<br><span class="hljs-variable">TCCC2006</span> 对于中国来说是不小的收获，中国选手占领了<span class="hljs-variable">Dev</span> 比赛，<span class="hljs-variable">PE</span> 获得<br>“浙江大学建校<span class="hljs-number">100</span> 年来第一个<span class="hljs-variable">TCCC</span> 冠军”，<span class="hljs-variable">magicpig</span> 和<span class="hljs-variable">zjq</span> 分获<span class="hljs-variable">Dev</span> 和<span class="hljs-variable">Design</span><br>的亚军，也就是说中国包揽了所有亚军。在比赛之余，我很高兴认识了众多<br><span class="hljs-variable">TopCoder</span> 的朋友。<br><span class="hljs-variable">Petr</span> 在决赛中表现了非常良好的状态，<span class="hljs-variable">TCCC</span> 的夺冠标志着<span class="hljs-variable">Petr</span> 收获了<span class="hljs-number">2006</span><br>年的大满贯。<span class="hljs-variable">Ying</span> 也采用了很合理的策略，只可惜他的赌博由于运气差一些惜败。<br>我采用了比较保守的策略，在所有决赛选手中排名第<span class="hljs-number">2</span>，这也是我在<span class="hljs-variable">TopCoder</span> 的<br>现场赛事中的最高名次了。<br><span class="hljs-variable">TCCC2006</span> 我很感谢家人的关心，父母凌晨很早起床查看我的比赛结果，而<br><span class="hljs-variable">uncle</span> 还特地赶来现场为我加油。这几年的<span class="hljs-variable">TopCoder</span> 现场比赛的赞助商列表里都能<br>找到<span class="hljs-variable">American</span> <span class="hljs-variable">Online</span><span class="hljs-punctuation">(</span><span class="hljs-variable">AOL</span><span class="hljs-punctuation">)</span>的身影，<span class="hljs-variable">TCCC2006</span> 是<span class="hljs-variable">AOL</span> 唯一一次进行了<span class="hljs-number">3</span> 个小时左<br>右的全程直播，父母和<span class="hljs-variable">uncle</span> 都在网络上观看了现场的影像直播。<br><span class="hljs-variable">TCCC2006</span> 我神奇地保持了<span class="hljs-number">100</span><span class="hljs-operator">%</span>的正确率，我个人认为<span class="hljs-variable">TopCoder</span> 现场比赛对<br>正确率提出了更高的要求，我们不必太在意<span class="hljs-variable">Coding</span> 阶段的那些高分，只要自己的<br>程序是正确的，就是成功的。<br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个<br>回顾。首先是<span class="hljs-variable">GCJ2006</span> 的回忆。<br><span class="hljs-variable">Google</span> <span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span> <span class="hljs-number">2006</span><br>一波三折：<br><span class="hljs-variable">Google</span> <span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span> <span class="hljs-number">2006</span> 是我第一次到美国参加现场的程序设计比赛。<span class="hljs-variable">Google</span><br><span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span> <span class="hljs-number">2006</span> 的比赛地点设在了纽约，这次纽约之行之前的签证出了不小的问题，<br>这里非常感谢大家对我们的关心，特别感谢吴总（<span class="hljs-variable">wyy</span>）和鲁小石的帮助，使我最<br>终踏上纽约之旅。<br>从北京到纽约的飞行时间是<span class="hljs-number">13</span> 个半小时，由于是第一次做超过<span class="hljs-number">8</span> 小时的飞机，<br>没有什么必要的经验和准备，路途非常疲劳。一到宾馆就睡了，结果由于手机铃声<br>的时间使用的是东方时间，差了<span class="hljs-number">12</span> 个小时，一觉把所有事情连晚饭一起都睡过了，<br>随便吃点东西就继续睡了。之后的所有现场比赛我都养成了提前睡觉的习惯，以保<br>证充足的体力。<br>比赛过程：<br>比赛时精神状态还算可以，但是分配了比赛房间之后发现自己和<span class="hljs-variable">tomek</span> 分在一<br>个房间，真是很不爽；在和旁边的<span class="hljs-variable">zhuzeyuan</span> 抱怨的时候，发现他和<span class="hljs-variable">Petr</span> 一个房<br>间，彼此彼此吧。<br>下面就是比赛过程了，总体来说比赛过程比想象的艰苦，不过其实在<span class="hljs-variable">System</span><br><span class="hljs-variable">Test</span> 之前的结果还是很满意的，先简单描述一下<span class="hljs-number">3</span> 道题目吧。<br><span class="hljs-number">250</span> 分的题目是一道平面极值问题，给定<span class="hljs-variable">n</span> 个点，求一条直线，使得<span class="hljs-variable">n</span> 个点到<br>这条直线的<span class="hljs-variable">y</span> 方向截距总和最小。我回忆起金凯在<span class="hljs-number">2003</span> 年集训队论文中报告中讲<br>到的很类似的一道题目，记得一个重要结论是这条直线一定经过两个点，虽然题目<br>有些不同，但是很快得到了相同的重要性质：这条直线一定经过两个点。这样很容<br>易得到一个<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n3</span><span class="hljs-punctuation">)</span>的算法。<br><span class="hljs-number">500</span> 分的题目是一道反<span class="hljs-built_in">Hash</span> 函数问题，给定一个<span class="hljs-built_in">Hash</span> 函数和<span class="hljs-variable">x</span>，求一个最小<br>的非负数<span class="hljs-variable">y</span> 使得<span class="hljs-variable">H</span><span class="hljs-punctuation">(</span><span class="hljs-variable">y</span><span class="hljs-punctuation">)</span><span class="hljs-operator">=</span><span class="hljs-variable">x</span>。估计了一下，单向搜索需要<span class="hljs-number">26</span><span class="hljs-operator">^</span><span class="hljs-number">8</span>，于是我改用双向搜索，<br>这样就变成了<span class="hljs-number">26</span><span class="hljs-operator">^</span><span class="hljs-number">4</span>。但是实现过程比想象的复杂很多，提交了后只有<span class="hljs-number">280</span> 左右了。<br>其实，这题有更简单的数学方法，<span class="hljs-variable">tomek</span> 的程序有<span class="hljs-number">450</span><span class="hljs-operator">+</span>。<br><span class="hljs-number">1000</span> 分的题目是涉及卷积函数和计算反函数的问题，通过转化变成线性方程<br>求解问题。当时受到现场气氛的影响有些紧张，浪费了不少时间，提交之后<span class="hljs-number">550</span><br>分左右。其实，当时一些原理问题都没有想清楚，不过后来和<span class="hljs-variable">Ying</span>（王颖）经过讨<br>论验证都是正确的。<br><span class="hljs-variable">Coding</span> 结束之前<span class="hljs-variable">Petr</span>，<span class="hljs-variable">tomek</span>，<span class="hljs-variable">Ying</span> 和<span class="hljs-variable">andrewzta</span> 都提交了<span class="hljs-number">3</span> 题，其中<span class="hljs-variable">Petr</span> 领<br>先得比较多，我和其余<span class="hljs-number">3</span> 人差距<span class="hljs-number">50</span> 分以内。<br><span class="hljs-variable">Challenge</span> 阶段开始之后，我由于<span class="hljs-number">500</span> 分题自己使用的是双向搜索的算法，没<br>有注意到有些单向的搜索加模线性方程的方法其实是正确，在<span class="hljs-number">10</span> 分钟以内<span class="hljs-variable">cha</span> 错<br>了<span class="hljs-number">2</span> 次。落后于上述的<span class="hljs-number">4</span> 个人，排在第五。<br>但是下面的<span class="hljs-number">5</span> 分钟发生了戏剧性的一幕，首先是<span class="hljs-variable">Petr</span> 的<span class="hljs-number">250</span> 被<span class="hljs-variable">cha</span> 了，接着<br><span class="hljs-variable">Ying</span> 的<span class="hljs-number">250</span> 也被<span class="hljs-variable">cha</span> 了，这样我面临这样一个情况：<span class="hljs-variable">tomek</span> 领先我<span class="hljs-number">100</span><span class="hljs-operator">+</span>分，<br><span class="hljs-variable">andrewzta</span> 领先我<span class="hljs-number">30</span><span class="hljs-operator">+</span>分，由于我和<span class="hljs-variable">tomek</span> 处在一个房间，所以我做出了一个大胆<br>的决定，就是<span class="hljs-variable">challenge</span> <span class="hljs-variable">tomek</span> 的<span class="hljs-number">1000</span> 分题，我随机生成了一个随机大数据，在最<br>后时刻提交了这个<span class="hljs-variable">challenge</span>，系统返回了一个令人窒息的结果：<span class="hljs-variable">successfully</span><br><span class="hljs-variable">challenge</span>。凭借这<span class="hljs-number">50</span> 分我一举超过了<span class="hljs-variable">tomek</span> 和<span class="hljs-variable">andrewzta</span>，在<span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 之前占<br>据了榜首的位置。<br>戏剧性的结果：<br>我很有幸能够在第一次参加现场比赛时，就能够和冠军这么接近，如果<span class="hljs-variable">System</span><br><span class="hljs-variable">Test</span> 能够全部<span class="hljs-variable">Pass</span> 的话，这可以认为是一场完美的比赛。<br>可是，整个故事就好像是被刻意设计的一样，<span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 之后的结果使我目瞪<br>口呆：首先是<span class="hljs-number">250</span> 分的题目，我由于有一个地方没有及时使用<span class="hljs-variable">double</span>，而造成整<br>数越界；然后，<span class="hljs-number">1000</span> 分的题目简直是悲剧的最高境界，我在高斯消元的时候没有<br>及时把一个重要变量暂存，导致影响了结果，没有想到竟然躲过了那么多大数据，<br>但是不能通过<span class="hljs-variable">System</span> <span class="hljs-variable">Test</span>。最后排在<span class="hljs-number">50</span> 名左右。这两个错误至今刻骨铭心。<br>最终<span class="hljs-variable">Petr</span> 获得冠军，<span class="hljs-variable">Ying</span> 亚军，<span class="hljs-variable">andrewzta</span> 由于<span class="hljs-number">500</span> 挂了排在第<span class="hljs-number">3</span>。<br><span class="hljs-number">11</span> 月的纽约有些冷，我随大队人马一同去了一趟帝国大厦，景色很迷人。第<br>二天休息一下后与几个中国选手打了一会“找朋友”，第一次美国之行就结束了。<br>总结：<br>比赛结果虽然不是很理想，但是对于第一次参加世界比赛的我还算可以接受。<br>也算是为今后的比赛留下一些教训吧。<br>在帝国大厦上见识了大家的拍摄功底，我由于技术差没有拍到任何合适的照片。<br>在比赛过程中，首次见识了<span class="hljs-variable">liympanda</span> 的大将风度，和<span class="hljs-variable">panda</span> 在一起总是笑口<br>常开，他无论遇到什么情况都无所畏惧，这一点我一直在努力学习，不过一直做的<br>不好。但是<span class="hljs-variable">panda</span> 打牌的时候就不一样了，总是喜欢偷看别人的牌，还炫耀自己<br>会说广东话，被<span class="hljs-variable">Ying</span> 和<span class="hljs-variable">rocking</span> 两位广东选手狠狠鄙视了一番。<br><span class="hljs-variable">Petr</span> 加上之前的<span class="hljs-variable">TCO</span> 和之后的<span class="hljs-variable">TCCC</span>，拿到了<span class="hljs-number">2006</span> 年的大满贯，可以算是历史<br>性的突破吧。<span class="hljs-variable">Tomek</span> 有些可惜，比完了还问我怎么<span class="hljs-variable">cha</span> 他<span class="hljs-number">1000</span> 分的，呵呵。<br>其实这次比赛<span class="hljs-variable">Ying</span> 挺可惜的，其实<span class="hljs-variable">Petr</span> 的发挥并不很好，如果<span class="hljs-variable">Ying</span> 运气再好<br>一些的话，历史从那时就要重写了。不过<span class="hljs-variable">Ying</span> 还是体现了他超强的数学功底，让<br>人佩服。另外，来自复旦的同省队友<span class="hljs-variable">LemonTree</span> 也获得了好成绩。<br>这好像是自己最后一次和<span class="hljs-variable">xreborner</span> 同场竞技了（由于之后<span class="hljs-variable">xreborner</span> 退役了<br>很长时间，忘记<span class="hljs-variable">GCJ2008</span> 我们又见面了，谢谢<span class="hljs-variable">Savior</span> 的提醒），感谢您在我高中<br>时期教授了我许多编程技巧，我一直沿用至今。<br>附比赛排名：<br><span class="hljs-variable">Handle</span> <span class="hljs-variable">Score</span><br><span class="hljs-variable">Petr</span> <span class="hljs-number">927.02</span><br><span class="hljs-variable">Ying</span> <span class="hljs-number">811.21</span><br><span class="hljs-variable">andrewzta</span> <span class="hljs-number">761.56</span><br><span class="hljs-variable">halyavin</span> <span class="hljs-number">732.46</span><br><span class="hljs-variable">tomek</span> <span class="hljs-number">677.55</span><br><span class="hljs-variable">tomekkulczynski</span> <span class="hljs-number">634.69</span><br><span class="hljs-variable">pashka</span> <span class="hljs-number">590.05</span><br><span class="hljs-variable">asaveljevs</span> <span class="hljs-number">579.60</span><br><span class="hljs-variable">ainu7</span> <span class="hljs-number">552.23</span><br><span class="hljs-variable">misof</span> <span class="hljs-number">537.19</span><br><span class="hljs-variable">Egor</span> <span class="hljs-number">534.19</span><br><span class="hljs-variable">xOberon</span> <span class="hljs-number">517.65</span><br><span class="hljs-variable">reid</span> <span class="hljs-number">516.23</span><br><span class="hljs-variable">bmerry</span> <span class="hljs-number">498.01</span><br><span class="hljs-variable">LemonTree</span> <span class="hljs-number">497.27</span><br><span class="hljs-variable">MikeMirzayanov</span> <span class="hljs-number">490.32</span><br><span class="hljs-variable">PaulJefferys</span> <span class="hljs-number">481.89</span><br><span class="hljs-variable">monsoon</span> <span class="hljs-number">478.60</span><br><span class="hljs-type">Andrew_Lazarev</span> <span class="hljs-number">475.39</span><br><span class="hljs-variable">tsjoker</span> <span class="hljs-number">454.86</span><br><span class="hljs-variable">kalinov</span> <span class="hljs-number">440.75</span><br><span class="hljs-variable">pparys</span> <span class="hljs-number">440.41</span><br><span class="hljs-variable">dyatlov</span> <span class="hljs-number">420.64</span><br><span class="hljs-type">Michael_Levin</span> <span class="hljs-number">419.19</span><br><span class="hljs-variable">daveagp</span> <span class="hljs-number">403.39</span><br><span class="hljs-variable">malcin</span> <span class="hljs-number">399.55</span><br><span class="hljs-variable">kalmakka</span> <span class="hljs-number">397.15</span><br><span class="hljs-variable">kedaizd</span> <span class="hljs-number">391.91</span><br><span class="hljs-variable">cyfra</span> <span class="hljs-number">389.02</span><br><span class="hljs-variable">Macsy</span> <span class="hljs-number">387.38</span><br><span class="hljs-variable">Psyho</span> <span class="hljs-number">377.22</span><br><span class="hljs-variable">mhchan</span> <span class="hljs-number">374.90</span><br><span class="hljs-variable">jakubr</span> <span class="hljs-number">353.71</span><br><span class="hljs-variable">overwise</span> <span class="hljs-number">330.73</span><br><span class="hljs-variable">kia</span> <span class="hljs-number">283.48</span><br><span class="hljs-variable">ACRush</span> <span class="hljs-number">282.62</span><br><span class="hljs-variable">JongMan</span> <span class="hljs-number">261.44</span><br><span class="hljs-variable">IvanRomanov</span> <span class="hljs-number">251.33</span><br><span class="hljs-variable">DmitryKorolev</span> <span class="hljs-number">235.14</span><br><span class="hljs-variable">Revenger</span> <span class="hljs-number">234.54</span><br><span class="hljs-variable">elizarov</span> <span class="hljs-number">233.79</span><br><span class="hljs-variable">evgeni</span> <span class="hljs-number">232.44</span><br><span class="hljs-variable">antimatter</span> <span class="hljs-number">226.70</span><br><span class="hljs-variable">CatalinT</span> <span class="hljs-number">226.15</span><br><span class="hljs-type">Jan_Kuipers</span> <span class="hljs-number">225.73</span><br><span class="hljs-variable">krijgertje</span> <span class="hljs-number">225.11</span><br><span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> <span class="hljs-number">221.28</span><br><span class="hljs-type">w_</span> <span class="hljs-number">218.82</span><br><span class="hljs-variable">zhuzeyuan</span> <span class="hljs-number">217.09</span><br><span class="hljs-variable">falagar</span> <span class="hljs-number">212.75</span><br><span class="hljs-variable">MegaS</span> <span class="hljs-number">210.88</span><br><span class="hljs-variable">gawry</span> <span class="hljs-number">209.13</span><br><span class="hljs-variable">liympanda</span> <span class="hljs-number">207.74</span><br><span class="hljs-variable">hyyylr</span> <span class="hljs-number">206.37</span><br><span class="hljs-variable">skatou</span> <span class="hljs-number">205.00</span><br><span class="hljs-variable">Vintik</span> <span class="hljs-number">204.09</span><br><span class="hljs-variable">jasonw</span> <span class="hljs-number">199.82</span><br><span class="hljs-variable">darnley</span> <span class="hljs-number">199.59</span><br><span class="hljs-variable">NPermyakov</span> <span class="hljs-number">199.54</span><br><span class="hljs-variable">aengus</span> <span class="hljs-number">196.67</span><br><span class="hljs-variable">embe</span> <span class="hljs-number">191.62</span><br><span class="hljs-variable">Yarin</span> <span class="hljs-number">186.89</span><br><span class="hljs-variable">NSI</span> <span class="hljs-number">185.22</span><br><span class="hljs-variable">AdrianKuegel</span> <span class="hljs-number">182.40</span><br><span class="hljs-variable">nicka81</span> <span class="hljs-number">181.01</span><br><span class="hljs-variable">HeaDacHe</span> <span class="hljs-number">178.77</span><br><span class="hljs-variable">VitalyGoldstein</span> <span class="hljs-number">178.37</span><br><span class="hljs-variable">kappa</span> <span class="hljs-number">175.40</span><br><span class="hljs-variable">HilbertRaum</span> <span class="hljs-number">168.29</span><br><span class="hljs-variable">DmitryKlenov</span> <span class="hljs-number">168.26</span><br><span class="hljs-variable">Abednego</span> <span class="hljs-number">165.51</span><br><span class="hljs-variable">Rocking</span> <span class="hljs-number">164.38</span><br><span class="hljs-variable">Per</span> <span class="hljs-number">163.41</span><br><span class="hljs-type">Emilian_Miron</span> <span class="hljs-number">158.22</span><br><span class="hljs-variable">Aidin</span><span class="hljs-operator">.</span><span class="hljs-variable">Kashigar</span> <span class="hljs-number">156.94</span><br><span class="hljs-variable">lukasP</span> <span class="hljs-number">156.00</span><br><span class="hljs-variable">grotmol</span> <span class="hljs-number">152.34</span><br><span class="hljs-variable">gevak</span> <span class="hljs-number">142.55</span><br><span class="hljs-variable">nhzp339</span> <span class="hljs-number">130.61</span><br><span class="hljs-variable">NauCoder</span> <span class="hljs-number">107.71</span><br><span class="hljs-variable">lazyboy</span> <span class="hljs-number">98.73</span><br><span class="hljs-variable">WSX</span> <span class="hljs-number">56.89</span><br><span class="hljs-variable">Snail</span> <span class="hljs-number">25.00</span><br><span class="hljs-variable">Masao</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">blackmath</span> <span class="hljs-number">0.00</span><br><span class="hljs-operator">.</span><span class="hljs-variable">Invader</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">Mg9H</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">smsorin</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">Rostislav</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">nya</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">lyc1977</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">xreborner</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">goo</span> <span class="hljs-number">0.00</span><br><span class="hljs-variable">soul</span><span class="hljs-operator">-</span><span class="hljs-variable">net</span> <span class="hljs-operator">-</span><span class="hljs-number">25.00</span><br><span class="hljs-variable">wintokk</span> <span class="hljs-operator">-</span><span class="hljs-number">25.00</span><br><span class="hljs-variable">Ulan</span> <span class="hljs-operator">-</span><span class="hljs-number">25.00</span><br><span class="hljs-variable">Bankevich</span> <span class="hljs-operator">-</span><span class="hljs-number">25.00</span><br><span class="hljs-variable">madking</span> <span class="hljs-operator">-</span><span class="hljs-number">25.00</span><br><span class="hljs-variable">fpmc</span> <span class="hljs-operator">-</span><span class="hljs-number">25.00</span><br><span class="hljs-variable">Soultaker</span> <span class="hljs-operator">-</span><span class="hljs-number">25.00</span><br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个<br>回顾。今天到了<span class="hljs-number">2007</span> 年初的东京，回顾一下<span class="hljs-number">2007</span> 世界总决赛发生的趣事吧。<br><span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> <span class="hljs-variable">World</span> <span class="hljs-variable">Final</span> <span class="hljs-number">2007</span>——<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 东京决战<br><span class="hljs-number">2007</span> 年的东京<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 全球总决赛在樱花盛开的<span class="hljs-number">3</span> 月初拉开序幕。成立了一<br>年的<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 凭借<span class="hljs-number">2006</span> 年<span class="hljs-variable">ACM</span> 上海赛区的冠军，代表清华参加了此次<span class="hljs-variable">ACM</span><br>盛会。<br>记得黄金雄教授在杭州<span class="hljs-number">2008</span> 时说，<span class="hljs-variable">ACM</span> 总决赛的实力分布由原先的美洲独霸<br>逐渐转向了现在的亚欧争霸。<span class="hljs-number">2007</span> 年，同样来自亚洲的上海交大具有很强的夺冠<br>实力，欧洲<span class="hljs-number">2007</span> 年虽然没有顶尖高手<span class="hljs-variable">Petr</span> 和<span class="hljs-variable">tomek</span> 的参与，但是<span class="hljs-variable">ACM</span> 传统名校<br><span class="hljs-variable">St</span><span class="hljs-operator">.</span> <span class="hljs-variable">Petersburg</span>，<span class="hljs-variable">St</span><span class="hljs-operator">.</span> <span class="hljs-variable">Petersburg</span> <span class="hljs-variable">IMFO</span>，<span class="hljs-variable">Warsaw</span>，<span class="hljs-variable">Saratov</span>，<span class="hljs-variable">Petrozavodsk</span> 等都派出了极<br>其豪华的阵容。虽然在<span class="hljs-number">2000</span> 年前后美洲队伍成绩不佳，但是近些年由于众多欧洲<br>选手的加盟，美洲<span class="hljs-variable">MIT</span> 等顶尖名校也在总决赛中表现得非常强势。<br>记得，每次世界总决赛之前，<span class="hljs-variable">TopCoder</span> 的论坛上都会罗列出所有参加总决赛<br>的<span class="hljs-variable">TopCoder</span> 选 手名单。但是我不是很看重这些数据，因为在很多次与欧洲选手切<br>磋之后，我发现了自己与欧洲选手相比的一个重大缺陷：我参加各类赛事以来，起<br>初比赛过程中常 常受压力的影响很大，很难正常发挥自己的水平。后来情况有所<br>好转，在大多数比赛中都能正常发挥自己的水平。可是，令我感到意外的是，许多<br>来自西方的选手在 巨大的压力下，反而表现得极其兴奋而能超常发挥出自己的水<br>平。来自西方的各队，我相信他们只要达到了兴奋的状态，都拥有获得冠军的实力。<br>去年上海交大总决 赛总结中，他们也提到了自己没有发挥出应有的水平，而<span class="hljs-variable">IMFO</span><br>即使在比赛压力下仍然能够做出<span class="hljs-number">8</span> 题，可见他们平时训练实力之强。但是我觉得<br>现场比赛发挥受影响可能是少数中国选手的坏习惯，可能不适合用同样的思路分析<br>欧洲的顶尖高手。<br>抵达东京：<br>出发的前一天晚上，我仍然熬夜参加了<span class="hljs-variable">TopCoder</span> 上的<span class="hljs-variable">SRM</span> 比赛，竟然是<span class="hljs-variable">Petr</span><br>出的题目。当时我与<span class="hljs-variable">Petr</span> 的<span class="hljs-variable">Rating</span> 差距很小，当时我<span class="hljs-number">3</span> 道题目都交出了很高的分<br>数，在<span class="hljs-variable">System</span> <span class="hljs-variable">Tests</span> 之前遥遥领先，但是<span class="hljs-number">500</span> 和<span class="hljs-number">1000</span> 分的题目都由于一些很小的<br>粗心而失败了。我也失去了在总决赛之前超过<span class="hljs-variable">Petr</span> 的大好机会。结果到达日本之<br>后的第二天，吃早餐的时候，我就碰到了作为教练来到东京的<span class="hljs-variable">Petr</span>，他一看到我就<br>扯前天比赛的事情，汗。现在回想起来，那场<span class="hljs-variable">SRM</span> 对我的总决赛之旅确实有不小<br>的负面影响。<br>抵达东京之后才发现，所有队伍中，只有我们选择了与所有志愿者衣服颜色<br>相同的清华校色紫色，开幕式过程中，许多队伍都把我们当成志愿者了。<br>练习赛前一天的晚会很丰盛，大多食物都是中国风格的，水果也非常好吃。<br>晚会期间，我见到了众多大陆学校的队伍，当年大陆至少有<span class="hljs-number">15</span> 支队伍参加总决赛，<br>随处可以感觉到说着国语的选手。同时还见到了许多<span class="hljs-variable">TCCC</span> 上出现过的面孔，随后<br>发现<span class="hljs-variable">ardiankp</span> 也来参加了，我们还聊起了<span class="hljs-variable">ACM</span> 在新加坡（<span class="hljs-variable">ardiankp</span> 是代表南洋理<br>工大学参加的）的情况。类似总决赛这样的比赛，我觉得选手之间的交流则更重要<br>了，因为每次总决赛都会集结众多熟悉的<span class="hljs-variable">ID</span> 但陌生的面孔。晚一些之后，我们与<br>北京大学的<span class="hljs-variable">T2</span> 一起打牌，队友<span class="hljs-variable">geworm</span> 和<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 都抽签到了另一方，他们的牌太猛<br>了，在加上我和李文新老师的牌都不好，结果我们惨败。<br>从正式比赛的前一天的中午开始，主办方组织我们游玩当地的<span class="hljs-variable">Disney</span> 乐园。<br>日本<span class="hljs-number">3</span> 月的景色很美，当地人也很热情，唯一的缺点就是无论用日语还是日式英<br>语都很难交流。我们在<span class="hljs-variable">Disney</span> 乐园中主要以观看表演为主，没有参与过多的活动。<br>东京到了晚上有些冷，我嘴唇都有些结冰了，可是发现路上许多日本女高中生还穿<br>着裙子，仰慕。<br>正式比赛：<br>总决赛的队伍是按照学校的音序排座位的，练习赛时我们发现自己坐在来自<br>荷兰的上届亚军<span class="hljs-variable">Twente</span> 大学旁边，刚打招呼就发现他们<span class="hljs-number">3</span> 人的最低身高也有<span class="hljs-number">190</span>，<br>据说荷兰女子的平均身高也有<span class="hljs-number">180</span> 以上，似乎觉得自己是从小人国来的。<br>练习赛过程中，我已经丝毫感受不到娱乐的气息了，现场的紧张气氛已经笼<br>罩了我们全队。所有队伍都在抓紧一分一秒熟悉比赛环境，赛场中敲击键盘的声音<br>已经完全覆盖了观众鼓掌的声音。比赛中使用的<span class="hljs-variable">PC2</span> 提交系统比想象得稳定，我们<br>努力尝试各种功能以熟悉机子上的编程环境。东京的总决赛使用了一个形状奇特的<br>键盘，由于当时早已养成了自带键盘的习惯，这次总决赛中奇形怪状的键盘对我编<br>程的速度影响非常大。<br>总决赛正式比赛在第二天<span class="hljs-number">9</span> 点左右开始，<span class="hljs-variable">Bill</span> 想尽各种办法活跃气氛，不过比<br>赛开始前几分钟现场还是静得可怕，比赛开始<span class="hljs-number">5</span> 分钟之后，现场就被键盘声笼罩<br>直到结束。我们回顾一下比赛的过程吧，底纹的文字是我比赛后写下的总结：<br>这次<span class="hljs-variable">World</span> <span class="hljs-variable">Final</span> 的题目又基本由编程题组成，可能是由于比赛时不够兴奋，<br>比赛全程都非常不顺利。<br>大概从<span class="hljs-number">2003</span> 年开始，世界总决赛的题目风格已经完全倒向以编程题为主的特<br>点，对此我们早有准备。不过由于时差问题，还有几天前<span class="hljs-variable">SRM</span> 比赛由于错两题导<br>致<span class="hljs-variable">Rating</span> 跌停对我信心的影响，使我比赛中一直不是很兴奋。不过比赛过程中，<br>我们仍然坚定的采用前面提到过的常用组队模式：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">geworm</span> 全程负责读题，思考算法和出数据；<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 和我在比赛前<span class="hljs-number">2</span> 个小时一起攻简单的题目；<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> <span class="hljs-number">2</span> 小时后<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 就开始死磕难题，我主写程序一直到<span class="hljs-number">3</span> 个半小时左右，结<br>合<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 对难题的把握，大家开始合攻难题。<br><span class="hljs-number">25</span> 分钟：<span class="hljs-variable">Problem</span> <span class="hljs-variable">A</span>，简单地枚举。可是我生物没有学好，没有考虑父母基因<br>的顺序问题，错了一次。<br>比赛开始时，正常情况我会从<span class="hljs-variable">B</span><span class="hljs-operator">-</span><span class="hljs-built_in">I</span> 中间寻找容易上手的题目。可是由于有些紧<br>张，直到<span class="hljs-variable">geworm</span> 给我翻译<span class="hljs-variable">A</span> 题目内容时，我还没有读懂任何题目，这种情况很少<br>发生。<br>题目<span class="hljs-variable">A</span> 的描述，需要一些必要的生物知识帮助理解，可是这些东西我早已忘<br>记。<span class="hljs-variable">geworm</span> 花了不少时间帮助我理解这题，我还是由于没有考虑父母基因的顺序<br><span class="hljs-variable">WA</span> 了一次。不过改过来之后，我们竟然是所有队伍中第一个通过<span class="hljs-variable">A</span> 题的，可见当<br>时很多队伍也没有完全放开。<br><span class="hljs-number">43</span> 分钟：<span class="hljs-variable">Problem</span> <span class="hljs-variable">B</span>，最长上升子序列。开始算法没有想好，莫名其妙地错了<br>一次。<br>如果说题<span class="hljs-variable">A</span> 的<span class="hljs-variable">WA</span> 是生物问题，那<span class="hljs-variable">B</span> 的<span class="hljs-variable">WA</span> 简直就是莫名其妙。<span class="hljs-variable">B</span> 就是最长上<br>升子序列问题，好像刚开始写时我和<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 都没有想清楚，写了一个神鬼莫测的程<br>序，<span class="hljs-variable">WA</span> 一次之后才改成正确算法。可是当时我们都没有想到的，总决赛中我们队<br>伍莫名其妙的<span class="hljs-variable">WA</span> 噩梦才刚刚开始。<br><span class="hljs-number">97</span> 分钟：<span class="hljs-variable">Problem</span> <span class="hljs-variable">G</span>，枚举<span class="hljs-operator">+</span>模拟。这是很扯淡的一题，题目很容易看错，我<br>们由于看错题目错了两次，等看到<span class="hljs-variable">Twente</span> 大学过了之后才重读题目，找到了正确<br>的理解，浪费了大量的时间。<br><span class="hljs-variable">G</span> 的题目描述确实不是很清楚，许多队伍都发生了理解错误，我们也不例外。<br>不过第<span class="hljs-number">2</span> 次提交错误就不能理解了，当时也不知道出于什么原因又提交了第二次，<br>难道是想先抢一个提交冠军吗？当时我们确实受到了开局不顺利的影响，这样做在<br>罚时本身就落后的情况更是下雪上加霜。<br><span class="hljs-number">146</span> 分钟：<span class="hljs-variable">Problem</span> <span class="hljs-variable">F</span>，<span class="hljs-variable">BFS</span>。其实这题是我发挥编程能力的机会，但是我开始<br>用了一个很奇怪的搜索方法，错了一次才改用<span class="hljs-variable">BFS</span> 过了。<br>在<span class="hljs-variable">G</span> 题迷茫而放弃之后，我又尝试实现了<span class="hljs-variable">F</span>。<span class="hljs-variable">F</span> 的第一次<span class="hljs-variable">WA</span> 是我们<span class="hljs-variable">Final</span> 之行<br>的第三次“莫名其妙”了，我也不知道自己用了什么一种奇怪的搜索方法竟然过了<br>样例，还马上提交了，面对这种情况我有些着急，表现得很不冷静。好在<span class="hljs-variable">geworm</span><br>及时提醒，我马上改成<span class="hljs-variable">BFS</span> 过了。在这期间，<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 已经实现出了<span class="hljs-built_in">I</span> 题，并提交了一<br>次，结果是<span class="hljs-variable">WA</span>。<br><span class="hljs-number">178</span> 分钟：<span class="hljs-variable">Problem</span> <span class="hljs-built_in">C</span>，排序<span class="hljs-operator">+</span>枚举。这题有一个阴险的地方，就是<span class="hljs-variable">theta</span><span class="hljs-operator">=</span><span class="hljs-number">0</span> 的<br>情况，还好我们考虑到了，这也是我们唯一一次<span class="hljs-variable">AC</span> 的题目了。<br><span class="hljs-built_in">C</span> 题的算法其实非常清楚，阴险的情况我们也考虑到了，我终于没有再搞笑一<br>次，这也是我们唯一一次<span class="hljs-variable">AC</span> 的题目了。从通过<span class="hljs-built_in">C</span> 的时刻讲，我们的形式还是很有<br>利的，因为难度很大的<span class="hljs-built_in">I</span> 我们已经实现得差不多了。<br><span class="hljs-number">224</span> 分钟：<span class="hljs-variable">Problem</span> <span class="hljs-built_in">D</span>，数学题。这题本是一道很简单的数学题目，但是不知<br>出题人怎么想的，搞了一些没有任何意义的东西，真是这次题目的一大败笔。我们<br>开始由于没有注意三点共线的情况错了<span class="hljs-number">3</span><span class="hljs-operator">-</span><span class="hljs-number">4</span> 次，然后由于<span class="hljs-variable">int64</span> 越界又错了<span class="hljs-number">3</span><span class="hljs-operator">-</span><span class="hljs-number">4</span> 次，<br>最后错了<span class="hljs-number">7</span> 次才<span class="hljs-variable">AC</span>。这题一共浪费了<span class="hljs-number">1</span> 个多小时。<br>在<span class="hljs-variable">BGF</span> 各一次奇怪的<span class="hljs-variable">WA</span> 之后，我们又完全陷在了<span class="hljs-built_in">D</span> 题的陷阱之中，如果顺<br>利的话<span class="hljs-built_in">D</span> 题只需要<span class="hljs-number">15</span> 分钟就可以写完，可是我们忘记考虑了<span class="hljs-built_in">D</span> 题中很多的阴险情<br>况，拖延了<span class="hljs-number">1</span> 个多小时，贡献了<span class="hljs-number">7</span> 个莫名其妙的<span class="hljs-variable">WA</span>。可是，当时我并没有想到，<br>这已经是我<span class="hljs-variable">AC</span> 的最后一道题目了。<br><span class="hljs-number">227</span> 分钟：<span class="hljs-variable">Problem</span> <span class="hljs-built_in">I</span>，数学<span class="hljs-operator">+</span>模拟。这题是<span class="hljs-variable">Jelly</span> 写的，有很多特殊情况。<br>平心而论，我在总决赛上的状态不是很好，编程速度受到影响，而且有<span class="hljs-number">10</span> 次<br>以上的错误提交。最后我们<span class="hljs-number">7</span> 题的罚时高达<span class="hljs-number">1200</span> 多，而上海赛区同样<span class="hljs-number">7</span> 题的罚时<br>只有<span class="hljs-number">700</span> 多，从这一点上也可以看出当时实在不在状态。不过，<span class="hljs-variable">wd</span><span class="hljs-operator">.</span><span class="hljs-variable">h</span> 很好地执行<br>了我们预定的组队模式，顺利完成了拖后中卫的角色。在我通过<span class="hljs-built_in">D</span> 题之后，他改<br>正了<span class="hljs-built_in">I</span> 程序中的最后一个<span class="hljs-variable">bug</span>。<span class="hljs-built_in">I</span> 题最终也只有我们和华沙两支队伍通过，可是说<br>是我们最终能够获得亚军的杀手锏。记得在颁奖仪式之前，基本上所有选手见到我<br>都问<span class="hljs-built_in">I</span> 怎么做，我都统一回答：是胡伟栋做的。<br>我们依靠<span class="hljs-built_in">I</span> 题的<span class="hljs-variable">AC</span> 首次排在了榜首。比赛进行了<span class="hljs-number">227</span> 分钟，能够在<span class="hljs-number">200</span> 分钟<br>之后获得领跑的机会，我首次看到了夺冠的希望，上海和西安赛区的欢呼场面一次<br>又一次从我眼前闪过。当时只有华沙大学通过<span class="hljs-number">6</span> 题，其他队伍都还不超过<span class="hljs-number">5</span> 题。<br>可是幸福只持续了短暂的<span class="hljs-number">3</span> 分钟，我们由于罚时太多而被华沙反超，华沙大<br>学通过第<span class="hljs-number">7</span> 题时华沙队员的反应几乎疯狂，<span class="hljs-variable">ICPC</span> 的工作人员也用照片记录了这一<br>时刻。<br><span class="hljs-variable">Problem</span> <span class="hljs-built_in">E</span>，我们的算法应该是正确的：二分答案<span class="hljs-operator">+</span>最短路。但是不知程序犯了<br>什么错误，没有<span class="hljs-variable">AC</span>。<br><span class="hljs-variable">Problem</span> <span class="hljs-variable">H</span>，很复杂的几何题目，我们的算法是：扫描。但是不知程序又哪里<br>写错了，结果是<span class="hljs-variable">WA</span>，不是<span class="hljs-variable">TLE</span>。<br>虽然在接下来的<span class="hljs-number">73</span> 分钟时间内我们没有再过题，不过我们仍然拚杀到了最后<br>一刻，拼尽全力而无怨无悔。无论是<span class="hljs-built_in">E</span> 还是<span class="hljs-variable">H</span>，我们都想出了正确的算法，并且成<br>功写完了程序，但是<span class="hljs-variable">Judge</span> 给出的结果一直是<span class="hljs-variable">WA</span>。我们不断测试数据，并修正了<br>一些<span class="hljs-variable">bug</span>，但仍然不能通过第<span class="hljs-number">8</span> 题。在这种情况下的稳定过题能力我们确实特别没<br>有训练过，华沙能够通过<span class="hljs-number">8</span> 题的超强实力确实很让人敬佩。比赛刚结束时，<span class="hljs-variable">Petr</span> 还<br>特地赶来问我们有没有通过第<span class="hljs-number">8</span> 题，<span class="hljs-variable">ICPC</span> 的工作人员碰巧留下了照片。<br>当时我很希望能够借他的运气得到一个<span class="hljs-variable">Yes</span>，不过<span class="hljs-variable">PC2</span> 还是不断返回<span class="hljs-variable">WA</span> 直到<br>最后。<br>后来，<span class="hljs-built_in">E</span> 题就成了我写计算几何题目的一个巨大的心理障碍，直到<span class="hljs-number">2</span> 个月前在<br><span class="hljs-variable">Proxima</span> 的一次训练中，在队友的支持下，我终于成功通过了一个更强版本的<span class="hljs-built_in">E</span> 题<br>（题目在<span class="hljs-variable">UVA</span> 上，题号是<span class="hljs-number">11425</span>，这题至今<span class="hljs-number">2009.1</span> 也还只有我和东京冠军队的<br><span class="hljs-variable">marek</span> 通过）。<br><span class="hljs-variable">Problem</span> <span class="hljs-variable">J</span>，这是一道很复杂的算法题目，现在我还不能证明算法的正确性。<br>更重要的是这题很容易实现一些看似正确的算法，可能没有做这题是我们这次比赛<br>的唯一成功之处。<br><span class="hljs-built_in">I</span> 的算法大致如下：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> <span class="hljs-type">X_i</span> <span class="hljs-operator">=</span> <span class="hljs-variable">the</span> <span class="hljs-variable">mininum</span> <span class="hljs-variable">cut</span> <span class="hljs-variable">between</span> <span class="hljs-type">V_i</span> <span class="hljs-variable">and</span> <span class="hljs-type">V_</span><span class="hljs-number">0.</span><br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">while</span> <span class="hljs-punctuation">(</span><span class="hljs-variable">the</span> <span class="hljs-variable">graph</span> <span class="hljs-variable">is</span> <span class="hljs-variable">not</span> <span class="hljs-variable">empty</span><span class="hljs-punctuation">)</span><br><span class="hljs-punctuation">&#123;</span><br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">m</span> <span class="hljs-operator">=</span> <span class="hljs-variable">min</span><span class="hljs-punctuation">(</span><span class="hljs-type">X_i</span><span class="hljs-punctuation">)</span><span class="hljs-operator">.</span><br><span class="hljs-punctuation">(</span><span class="hljs-number">4</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">remove</span> <span class="hljs-variable">all</span> <span class="hljs-variable">nodes</span> <span class="hljs-type">V_i</span> <span class="hljs-variable">whose</span> <span class="hljs-type">X_i</span><span class="hljs-operator">=</span><span class="hljs-variable">m</span><span class="hljs-operator">.</span><br><span class="hljs-punctuation">(</span><span class="hljs-number">5</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">let</span> <span class="hljs-type">X_i</span> <span class="hljs-operator">=</span> <span class="hljs-variable">min</span><span class="hljs-punctuation">(</span> <span class="hljs-type">X_i</span> <span class="hljs-operator">,</span> <span class="hljs-variable">m</span><span class="hljs-operator">+</span> <span class="hljs-variable">the</span> <span class="hljs-variable">mininum</span> <span class="hljs-variable">cut</span> <span class="hljs-variable">between</span> <span class="hljs-type">V_i</span> <span class="hljs-variable">and</span> <span class="hljs-type">V_</span><span class="hljs-number">0</span> <span class="hljs-punctuation">)</span><span class="hljs-operator">.</span><br><span class="hljs-punctuation">&#125;</span><br><span class="hljs-punctuation">(</span><span class="hljs-number">6</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">return</span> <span class="hljs-type">X_</span><span class="hljs-number">1.</span><br>这里提一个公开的秘密，最后显示华沙大学的结果时，他们成功通过了<span class="hljs-built_in">E</span> 题，<br>可是比赛过程中，我们并没有看到他们挂起蓝色的气球，不知道来自浙江大学或者<br>中山大学的选手能不能仔细回忆一下，当时你们应该坐在他们旁边。<br>颁奖：<br>最终，华沙大学以通过<span class="hljs-number">8</span> 题的成绩获得冠军，<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 通过<span class="hljs-number">7</span> 题总用时<br><span class="hljs-number">1200</span> 分钟获得亚军。整场比赛，我们克服了开局的种种不利因素，成为全场第一<br>支通过<span class="hljs-number">7</span> 题的队伍，亚军也是一个非常可喜的成绩了。由于华沙大学不来自亚洲，<br>我们同时也获得了亚洲冠军。<br>颁奖仪式之后的表演很精彩，印象最深的要数那位“神偷”了，他在观众面<br>前不断施展“妙手空空”，观众掌声不断。记得表演结束后大家等电梯时，那位演<br>员从我们身边走过，我们都连忙确认自己的钱包和手机。<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 东京总决赛在<br>一片片掌声中落下帷幕。<br>总结：<br><span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 总决赛结束后，<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 又恢复了平静。<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 成立以来<br>共获得了两个分区赛冠军和一个总决赛亚军，从那之后<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 就宣布解散<br>了，也许唯一的遗憾就是没能获得一个真正的世界冠军。赛后，黄金雄教授也来向<br>我们祝贺，从他的言语中，我们也感受到了一丝挥之不去的遗憾。<br>东京总决赛的几天里，我有机会结识了许多国内外朋友，也是这次日本之行<br>的一大收获。同时也感谢众多<span class="hljs-variable">ACM</span> 选手一年来对我们的关心和支持，当时<span class="hljs-variable">bbs</span><span class="hljs-operator">.</span><span class="hljs-variable">pku</span><br>上留下了一个很长的帖子，让我永生难忘。<br>在现场比赛中，我数次与欧洲选手直接交手，对他们的特点有一定的了解：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> 欧洲选手的编程能力很强，很适应总决赛现有的题目风格。有些欧洲选<br>手在<span class="hljs-variable">notepad</span> 里写程序，然后直接提交的事迹绝非传说。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> 欧洲选手对于算法的灵活运用能力强，但是对于一些比较深的算法了解<br>不多。例如此次总决赛的<span class="hljs-variable">J</span> 题。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> 许多欧洲选手的现场抗压能力很强，即使在最后时刻仍然可以发挥出自<br>己的水平。<br>在总结过复旦和<span class="hljs-variable">Srbga</span> 出题的风格之后，总结一下我理解的总决赛题目风格吧：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">Srbga</span> 大哥出的题目和世界总决赛的题目风格近似，题目对编程能力提出<br>了极高的要求。相比之下大多数题目对算法的要求不高。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> 总决赛题目对算法的考察范围非常广，但是对于某特殊的算法要求不高。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> 总决赛题目的时间限制很宽，出题人很提倡一题多解。而且数据没有想<br>象得苛刻，随机算法有用武之地。<br>东京的总决赛已经结束快<span class="hljs-number">2</span> 年，今年寒假结束之后，我又要准备踏上总决赛<br>征程了，希望这次我们<span class="hljs-variable">Proxima</span> 能做的更好，将总决赛名次提高一位。<br>附<span class="hljs-variable">Final2007</span> 排名<br><span class="hljs-variable">Rank</span> <span class="hljs-variable">Name</span> <span class="hljs-variable">Solved</span> <span class="hljs-variable">Time</span><br><span class="hljs-number">1</span> <span class="hljs-variable">Warsaw</span> <span class="hljs-variable">University</span> <span class="hljs-number">8</span> <span class="hljs-number">1405</span><br><span class="hljs-number">2</span> <span class="hljs-variable">Tsinghua</span> <span class="hljs-variable">University</span> <span class="hljs-number">7</span> <span class="hljs-number">1200</span><br><span class="hljs-number">3</span> <span class="hljs-variable">St</span><span class="hljs-operator">.</span> <span class="hljs-variable">Petersburg</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">IT</span><span class="hljs-operator">,</span> <span class="hljs-variable">Mechanics</span> <span class="hljs-variable">and</span> <span class="hljs-variable">Optics</span> <span class="hljs-number">6</span> <span class="hljs-number">866</span><br><span class="hljs-number">4</span> <span class="hljs-variable">Massachusetts</span> <span class="hljs-variable">Institute</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span> <span class="hljs-number">6</span> <span class="hljs-number">866</span><br><span class="hljs-number">5</span> <span class="hljs-variable">Novosibirsk</span> <span class="hljs-variable">State</span> <span class="hljs-variable">University</span> <span class="hljs-number">6</span> <span class="hljs-number">868</span><br><span class="hljs-number">6</span> <span class="hljs-variable">Saratov</span> <span class="hljs-variable">State</span> <span class="hljs-variable">University</span> <span class="hljs-number">6</span> <span class="hljs-number">957</span><br><span class="hljs-number">7</span> <span class="hljs-variable">Twente</span> <span class="hljs-variable">University</span> <span class="hljs-number">6</span> <span class="hljs-number">1011</span><br><span class="hljs-number">8</span> <span class="hljs-variable">Shanghai</span> <span class="hljs-variable">Jiao</span> <span class="hljs-variable">Tong</span> <span class="hljs-variable">University</span> <span class="hljs-number">6</span> <span class="hljs-number">1026</span><br><span class="hljs-number">9</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Waterloo</span> <span class="hljs-number">6</span> <span class="hljs-number">1103</span><br><span class="hljs-number">10</span> <span class="hljs-variable">Moscow</span> <span class="hljs-variable">State</span> <span class="hljs-variable">University</span> <span class="hljs-number">6</span> <span class="hljs-number">1192</span><br><span class="hljs-number">11</span> <span class="hljs-variable">University</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Auckland</span> <span class="hljs-number">6</span> <span class="hljs-number">1210</span><br><span class="hljs-number">12</span> <span class="hljs-variable">California</span> <span class="hljs-variable">Institute</span> <span class="hljs-variable">of</span> <span class="hljs-variable">Technology</span> <span class="hljs-number">6</span> <span class="hljs-number">1241</span><br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个回<br>顾。最后是<span class="hljs-number">2008</span> 年的杭州复出。<br><span class="hljs-number">2008</span> 年<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span>——杭州复出<br><span class="hljs-number">2006</span> 年<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 总决赛结束后，<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 就宣布解散了，也许唯一的遗<br>憾就是没能获得一个真正的世界冠军。宣布退役<span class="hljs-variable">ACM</span> 之后，我并没有完全与<span class="hljs-variable">ACM</span><br>绝缘，每次<span class="hljs-variable">TopCoder</span> 大赛之前 还常常做一些<span class="hljs-variable">ACM</span> 比赛调整状态。记得<span class="hljs-number">08</span> 年初，<br>我也全程观看了总决赛，不过没有想过复出。<br>杭州复出：<br>一 切事情要从一个<span class="hljs-variable">zhuzeyuan</span> 的电话说起，时间是<span class="hljs-number">11</span> 月<span class="hljs-number">8</span> 日晚上<span class="hljs-number">10</span> 点左右，<br>当时我正在参加<span class="hljs-variable">UVA</span> 在线比赛而为<span class="hljs-variable">GCJ2008</span> 作准备。 <span class="hljs-variable">zhuzeyuan</span> 在电话里首先告<br>知我<span class="hljs-variable">Loner</span> 车祸的事情，好在现在<span class="hljs-variable">Loner</span> 已经痊愈了，当时确实很担心。随后，<br><span class="hljs-variable">zhuzeyuan</span> 向我介绍了 <span class="hljs-number">2008</span> 年<span class="hljs-variable">ACM</span> 比赛的进行情况，当时北京和哈尔滨赛区已经<br>结束。然后，邀请我加入<span class="hljs-variable">Proxima</span> 参加杭州赛区的比赛。我想当时答应的原因主要<br>有<span class="hljs-number">3</span> 个：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> 我 个人很喜欢<span class="hljs-variable">Coding</span>，虽然退出<span class="hljs-variable">ACM</span> 已经快两年了，但是还经常参加个<br>人比赛。刚刚结束的<span class="hljs-variable">GCJ2008</span> 中国区半决赛，出人意料的夺冠增强了我的信心。<br>另外，<span class="hljs-variable">ACM</span> 这样长达<span class="hljs-number">5</span> 个小时的团队比赛造就了很特别的环境，赛场上的气氛和<br>激情是做裁判教练或者参加个人比赛中无法体会到的。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> <span class="hljs-number">3</span> 年前的<span class="hljs-number">2005</span> <span class="hljs-variable">ACM</span> 杭州赛区，我留下了我大学生活中的一大遗憾。对于杭<br>州<span class="hljs-number">2005</span> 的惨败，我一直想寻找机会从那个跌倒的地方爬起来，彻底摆脱紫金港校<br>区留下的阴影。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> 其实还有一个原因就是我家在杭州，而且在本科期间我也曾经到杭州电子<br>科技大学做过关于<span class="hljs-variable">ACM</span> 的报告，<span class="hljs-variable">lcy</span> 老师的热情给我留下了深刻的印象。<br>对于<span class="hljs-variable">Loner</span> 的车祸，我也觉得非常意外。这也是对于我们常年在校园骑自行车里<br>横冲直撞的警示。<span class="hljs-variable">Loner</span> 现在能够恢复得这么好，我们都很高兴，祝你明年<span class="hljs-variable">ACM</span><br>好运。<br>加入<span class="hljs-variable">Proxima</span> 的手续很顺利，教练邬老师对我复出想法的回答简单扼要：研一<br>学生可以参加<span class="hljs-variable">ACM</span> 比赛。<br><span class="hljs-variable">Proxima</span> 的另外两名队友分别是<span class="hljs-variable">zhuzeyuan</span> 和<span class="hljs-variable">zhouyuan</span>（周源），我加入<br><span class="hljs-variable">Proxima</span> 之后，新<span class="hljs-variable">Proxima</span> 先后进行了<span class="hljs-number">3</span> 次训练比赛，随后就出发到杭州电子科技<br>大学参加<span class="hljs-number">2008</span> 年<span class="hljs-variable">ACM</span> 杭州赛区的比赛了。<br>当 时，我通过许多网上资料和<span class="hljs-variable">zhuzeyuan</span> 的描述了解了当时清华的战绩。到<br>杭州赛区之前，清华的<span class="hljs-variable">What</span>’<span class="hljs-variable">s</span> <span class="hljs-built_in">Up</span> 和<span class="hljs-variable">IronGods</span> 已经分别获得了哈尔滨和北京赛区的<br>冠军。其中<span class="hljs-variable">IronGods</span> 还获得了哈尔滨赛区的亚军，<span class="hljs-variable">What</span>’<span class="hljs-variable">s</span> <span class="hljs-built_in">Up</span> 则一起来到杭州参加<br>比赛。<span class="hljs-variable">Proxima</span> 在杭州赛区之前已经参加了北京赛区的比赛，成绩是第二名。就当<br>时的形势讲，我们没有资格考虑太多事情，如果想 保留悬念就必须获得杭州赛区<br>的冠军。<br>杭州赛区现场赛：<br>在杭州赛区练习赛那天的上午，我们抓紧一切时间进行了模拟训练，选择的<br>题目是<span class="hljs-variable">NEERC</span> 的题目。题目难度有些大，我们做满整整<span class="hljs-number">5</span> 小时，直到<span class="hljs-number">12</span> 点<span class="hljs-number">50</span> 才<br>急忙去吃午饭。结果很晚才到达比赛场地，到时候练习赛已经开始很久了。希望我<br>们的迟到没有影响旁边队熟悉比赛坏境。<br>杭电赛场的环境很好，在赛场里我找回了<span class="hljs-number">2006</span> 年上海赛区的感觉。队伍之间<br>的空间很宽敞，电脑桌也很大，足以让<span class="hljs-number">3</span> 个人在上面一起推导公式。马上就见到<br>了<span class="hljs-variable">lcy</span> 老师，不过他带来了一个不太好的消息——不允许自带键盘。好在杭电提供<br>的键盘很标准，对我们影响不大。<br>正式比赛在第二天早上<span class="hljs-number">9</span> 点开始，回顾一下比赛的过程吧：<br>在<span class="hljs-variable">Proxima</span> 队中，比赛开始时，仍然由我准备编程环境，然后从中间开始读题。<br>我马上发现了<span class="hljs-built_in">D</span> 是一道看似简单的题目，并且也注意到了这句话：<br><span class="hljs-variable">WARNING</span><span class="hljs-operator">:</span> <span class="hljs-variable">a</span> <span class="hljs-variable">naive</span> <span class="hljs-variable">algorithm</span> <span class="hljs-variable">might</span> <span class="hljs-variable">not</span> <span class="hljs-variable">be</span> <span class="hljs-variable">sufficient</span> <span class="hljs-variable">to</span> <span class="hljs-variable">solve</span> <span class="hljs-variable">this</span> <span class="hljs-variable">problem</span><span class="hljs-operator">.</span><br>但是没有想到的是<span class="hljs-variable">BFS</span> 算法也算是<span class="hljs-variable">naive</span> <span class="hljs-variable">algorithm</span>，我交出了全场第一个提交，<br>结果是理所当然的<span class="hljs-variable">TLE</span>。不过那句<span class="hljs-variable">WARNING</span> 稍微有些飘逸。<br><span class="hljs-variable">zhuzeyuan</span> 发现<span class="hljs-variable">A</span> 是简单题目，于是我马上写<span class="hljs-variable">A</span>。<br><span class="hljs-number">19</span> 分钟，<span class="hljs-variable">A</span>：判断两张图的修改距离。枚举全排列，统计即可。<br><span class="hljs-variable">A</span> 是最简单的题目，由于开始<span class="hljs-built_in">D</span> 的耽搁，我们大概是全场第<span class="hljs-number">4</span> 个出题的队伍。<br>接着，<span class="hljs-variable">zhouyuan</span> 发现<span class="hljs-variable">J</span> 也很简单，于是我转向<span class="hljs-variable">J</span>。<br><span class="hljs-number">28</span> 分钟，<span class="hljs-variable">J</span>：允许删点的并查集问题。通过添加新点的方法实现删点。<br>过了<span class="hljs-variable">J</span> 之后，排名暂时上升到第一位。随后，<span class="hljs-variable">zhuzeyuan</span> 发现没有新题可写，<br>于是就开始写<span class="hljs-built_in">C</span>，过程中，我和<span class="hljs-variable">zhouyuan</span> 发现<span class="hljs-variable">G</span> 比较简单，于是插空写<span class="hljs-variable">G</span>。<br><span class="hljs-number">50</span> 分钟，<span class="hljs-variable">G</span>：简单图论问题。开始删点判断错误造成<span class="hljs-variable">WA</span> 了一次。<br><span class="hljs-number">59</span> 分钟，<span class="hljs-built_in">C</span>：高精度计算和素数判定问题。这题是<span class="hljs-variable">zhuzeyuan</span> 写的。<br>不到一个小时就通过了<span class="hljs-number">4</span> 题，<span class="hljs-variable">Proxima</span> 获得了一个很好的开局。对于杭州赛区<br>难度的题目，能够在第一个小时通过<span class="hljs-number">4</span> 题已经很顺利了。对于许多分区赛中会出<br>现更多的简单题目的情况，有时能够做到一小时<span class="hljs-number">5</span> 题。但是一小时<span class="hljs-number">6</span> 题实在太难<br>了，记得我们在一次训练比赛中做到了一小时<span class="hljs-number">6</span> 题，已经是我们的能力极限了。<br>接下来我实现了一下<span class="hljs-variable">B</span>，可是由于发生了理解错误，计算结果与题目要求计算<br>的结果直接存在重复排列问题，只好把程序放在一边。<br>随后，<span class="hljs-variable">zhuzeyuan</span> 开始实现<span class="hljs-variable">H</span>，提交之后我开始写<span class="hljs-variable">F</span>。<br><span class="hljs-number">95</span> 分钟，<span class="hljs-variable">H</span>：计算几何，如果使用<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n2</span><span class="hljs-punctuation">)</span>的算法需要注意常数不易太大。<br><span class="hljs-number">105</span> 分钟，<span class="hljs-variable">F</span>：自动机判断相等问题，通过计算差乘的方法能够在<br><span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n2</span><span class="hljs-operator">*|</span><span class="hljs-variable">Sigma</span><span class="hljs-operator">|</span><span class="hljs-punctuation">)</span>内解决<br><span class="hljs-variable">H</span> 的提交等了很久，<span class="hljs-variable">H</span> 的<span class="hljs-variable">Yes</span> 出来后不久我就写完了<span class="hljs-variable">F</span>，提交之后也<span class="hljs-variable">Yes</span> 了。<br>大概在<span class="hljs-number">2</span> 个小时左右我们做出了<span class="hljs-number">6</span> 题，其实如果不在<span class="hljs-variable">B</span> 上浪费时间能够更早一些。<br>在<span class="hljs-number">2008</span> 杭州赛区，我们又一次获得了<span class="hljs-number">6</span><span class="hljs-operator">-</span><span class="hljs-number">4</span> 的领先优势。<br>下面我们面临一个比较困难的状况，<span class="hljs-built_in">E</span> 和<span class="hljs-built_in">I</span> 看似都比较复杂，但明白题意的<span class="hljs-variable">B</span><br>和<span class="hljs-built_in">D</span> 都没有想出算法。<span class="hljs-number">2008</span> 年杭州赛区的题目中，基本没有中等难度的题目，所<br>以我们通过<span class="hljs-number">6</span> 题之后就直接进入了比赛后期。当时我们分了一下工，我决定死磕<span class="hljs-built_in">D</span><br>题，<span class="hljs-variable">zhouyuan</span> 负责推<span class="hljs-variable">B</span> 题的公式。<span class="hljs-variable">zhuzeyuan</span> 尝试新题目<span class="hljs-built_in">E</span> 或者<span class="hljs-built_in">I</span>。<br>我的工作进行很不顺利，先实现了一个普通的<span class="hljs-variable">A</span><span class="hljs-operator">*</span>算法，由于优化得不好还是<br><span class="hljs-variable">TLE</span>。现在回想起来，<span class="hljs-built_in">D</span> 题标准<span class="hljs-variable">A</span><span class="hljs-operator">*</span>算法中使用的那个优化还是挺巧妙的，至少很有<br>艺术感。我放弃<span class="hljs-variable">A</span><span class="hljs-operator">*</span>算法之后，<span class="hljs-variable">zhouyuan</span> 似乎已经推好了<span class="hljs-variable">B</span> 题的公式，开始帮助我<br>实现<span class="hljs-built_in">D</span> 题。<br><span class="hljs-number">163</span> 分钟，<span class="hljs-built_in">D</span>：状态最短路径问题，通过<span class="hljs-variable">A</span><span class="hljs-operator">*</span>算法加一些优化可以轻松通过。<br><span class="hljs-variable">zhouyuan</span> 提出了一个很重要的优化方法，先通过解方程的方法判断是否有解，<br>在确认有解的情况下使用双向广度优先搜索，程序写好之后又<span class="hljs-variable">TLE</span> 了。不过我觉得<br>运行时间已经差不多了。于是，我使用了卡节点的方法，终于在第<span class="hljs-number">5</span> 次提交通过<br>了<span class="hljs-built_in">D</span>。<span class="hljs-built_in">D</span> 题我们用了大概一个小时左右。这时<span class="hljs-variable">What</span>’<span class="hljs-variable">s</span> <span class="hljs-built_in">Up</span> 早已通过<span class="hljs-number">5</span> 题，不过由于<br>他们卡在<span class="hljs-variable">H</span> 题上，我们仍然以<span class="hljs-number">7</span><span class="hljs-operator">-</span><span class="hljs-number">5</span> 领先。<br><span class="hljs-variable">zhuzeyuan</span> 确认<span class="hljs-built_in">E</span> 和<span class="hljs-built_in">I</span> 比较复杂之后，我们开始合攻<span class="hljs-variable">B</span> 题。<span class="hljs-variable">zhouyuan</span> 其实受到<br>了我原先错误算法的误导，他得到一些公式来计算繁衍函数，通过繁衍以及原先程<br>序的结果得到正确结果。不过，从当时的形式看，这样也是很不错的选择。<br>程序很快就写好了，提交之后又是奇怪的<span class="hljs-variable">TLE</span>。<span class="hljs-variable">B</span> 题的<span class="hljs-variable">TLE</span> 和<span class="hljs-built_in">D</span> 的<span class="hljs-variable">TLE</span> 本质完<br>全不同，<span class="hljs-variable">B</span> 题我们算法的复杂度是<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n4</span><span class="hljs-punctuation">)</span>的，对于<span class="hljs-variable">n</span><span class="hljs-operator">&lt;=</span><span class="hljs-number">20</span> 的数据范围，时间上应该<br>没有问题。于是，我生成了<span class="hljs-number">100</span> 组测试数据，发现总共只需要<span class="hljs-number">1</span> 秒左右。<br>在<span class="hljs-variable">B</span> 题的这一点上，我觉得命题人做的很不合理，虽然此题存在<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n3</span><span class="hljs-punctuation">)</span>的算法，<br>但是既然把范围出到<span class="hljs-number">20</span>，就应该允许<span class="hljs-built_in">O</span><span class="hljs-punctuation">(</span><span class="hljs-variable">n4</span><span class="hljs-punctuation">)</span>的算法通过。可是命题人一共叠出了<br><span class="hljs-number">6000</span> 组测试数据，使得我们的程序超时了。而且在<span class="hljs-variable">Clarify</span> 中的回答是<span class="hljs-number">1000</span> 多组，<br>我们优化程序之后还是一直<span class="hljs-variable">TLE</span>，当时我们怎么会想到是<span class="hljs-number">6000</span> 多。至少这里的范<br>围<span class="hljs-number">20</span> 极具误导性。幸好，<span class="hljs-variable">zhuzeyuan</span> 及时想出了一个解决方法——打表。由于对<br>程序没有信心，打表的<span class="hljs-number">15</span> 分钟时间内我们<span class="hljs-number">3</span> 人都只得通过手工计算简单数据来确<br>认程序的正确性。<br><span class="hljs-number">236</span> 分钟，<span class="hljs-variable">B</span>：比较复杂的动态规划，需要考虑<span class="hljs-number">4</span> 种情况。<br>打完表之后提交终于得到了第<span class="hljs-number">8</span> 个<span class="hljs-variable">Yes</span>，时间是<span class="hljs-number">236</span> 分钟，距离封版只有<span class="hljs-number">4</span> 分<br>钟。由于<span class="hljs-number">6000</span> 组的阴险数据，我们从第一次提交<span class="hljs-variable">B</span> 题到通过<span class="hljs-variable">B</span> 整整用了<span class="hljs-number">50</span> 分钟，<br>而且是<span class="hljs-number">3</span> 个人一直在一起做。<br>封版时，我们仍保持了<span class="hljs-number">8</span><span class="hljs-operator">-</span><span class="hljs-number">6</span> 的领先优势。但是接下来，我们犯下了杭州<span class="hljs-number">2008</span><br>最大的错误，如果类似的错误在总决赛中出现，我们将很可能失去领先位置。当时<br>我们没有看到港大挂起<span class="hljs-built_in">E</span> 的气球，于是在<span class="hljs-built_in">E</span> 和<span class="hljs-built_in">I</span> 中选择了<span class="hljs-built_in">I</span>，结果深深地陷在了<span class="hljs-built_in">I</span> 的<br>无底洞中，直到结束都不能自拔。<br><span class="hljs-built_in">I</span>：模拟题，需要考虑的情况比较多。<br><span class="hljs-built_in">E</span>：计算几何。计算半平面的交。<br>现在回想起来，<span class="hljs-built_in">E</span> 题的难度远没有<span class="hljs-built_in">I</span> 题大，我们错误估计了<span class="hljs-built_in">I</span> 的难度。非常敬<br>佩赛场上通过<span class="hljs-built_in">E</span> 题的港大和<span class="hljs-built_in">I</span> 题的湖南大学，你们不愧为射雕英雄。<br>清华<span class="hljs-number">2008</span> 战况：<br><span class="hljs-number">2008</span> 年，清华延续自己在<span class="hljs-variable">ACM</span> 大陆赛区中的霸主地位， <span class="hljs-number">4</span> 支不同的队伍获得<br>了创纪录的<span class="hljs-number">4</span> 个不同赛区的冠军。分别是：<br><span class="hljs-number">1.</span> <span class="hljs-variable">What</span>’<span class="hljs-variable">s</span> <span class="hljs-built_in">Up</span>——哈尔滨赛区冠军<br><span class="hljs-number">2.</span> <span class="hljs-variable">IronGods</span>——北京赛区冠军<br><span class="hljs-number">3.</span> <span class="hljs-variable">Proxima</span>——杭州赛区冠军<br><span class="hljs-number">4.</span> <span class="hljs-variable">ZCS</span>——成都赛区冠军<br>从<span class="hljs-variable">ACM</span> 的规则上讲<span class="hljs-number">4</span> 支队伍都获得了进军总决赛的资格，清华总决赛队伍的<br>选拔过程在成都赛区结束的第二天就开始了。<br>从我的角度描述另<span class="hljs-number">3</span> 支队伍的情况吧：<br><span class="hljs-variable">What</span>’<span class="hljs-variable">s</span> <span class="hljs-built_in">Up</span> 是清华第一个获得冠军的队伍，杭州赛区的过程中，他们以<span class="hljs-variable">amber</span><br>主写程序的模式进行，在比赛开始阶段体现出了很强的冲击力，不过卡住<span class="hljs-variable">H</span> 后的<br>慌乱略显出组队模式的缺陷。虽然他们在杭州赛区之后就选择放弃了总决赛资格的<br>争夺，但是我们都深知他们的实力。后来<span class="hljs-variable">What</span>’<span class="hljs-variable">s</span> <span class="hljs-built_in">Up</span> 的成员担任了<span class="hljs-variable">PK</span> 比赛的裁判<br>工作。<br><span class="hljs-variable">ZCS</span> 由刚进入清华学习的三名大一学生组成，成员是<span class="hljs-variable">yuhch123</span>，<span class="hljs-variable">Cheryl</span> 和<br><span class="hljs-variable">ScaleRhyme</span>。我参加<span class="hljs-variable">Proxima</span> 之后没有和<span class="hljs-variable">ZCS</span> 交过手，不过在<span class="hljs-variable">Ural</span> 和<span class="hljs-variable">SGU</span> 上比赛<br>时看到过<span class="hljs-variable">ZCS</span> 的身影。在杭州赛区之后，<span class="hljs-variable">ZCS</span> 在成都赛区创造了<span class="hljs-number">7</span><span class="hljs-operator">/</span><span class="hljs-number">7</span><span class="hljs-punctuation">(</span><span class="hljs-number">7</span> 提交<span class="hljs-number">7</span> 通过<span class="hljs-punctuation">)</span><br>奇迹，不过和北京赛区相似的是后期略显经验不足。随后，<span class="hljs-variable">ZCS</span> 没有参加校内<span class="hljs-variable">PK</span><br>赛。<br><span class="hljs-variable">IronGods</span> 的组成是<span class="hljs-variable">OpenGL</span>，<span class="hljs-variable">ahyangyi</span> 和<span class="hljs-variable">ghy</span>。在<span class="hljs-variable">IronGods</span> 成立之初，我一直<br>很看好这支队伍。哈尔滨赛区结束后，记得<span class="hljs-variable">ahyangyi</span> 还来和我抱怨比赛中的失误，<br>那道高精度题目确实有些过于复杂（呵呵，不过至少数据没有错误）。北京赛区的<br>情况，我是事后听<span class="hljs-variable">dzx</span> 介绍的，<span class="hljs-variable">IronGods</span> 依靠最后一小时的稳定发挥，通过<span class="hljs-number">3</span> 题，<br>一举压倒<span class="hljs-variable">Proxima</span>，<span class="hljs-variable">Carriage</span> 和<span class="hljs-variable">ZCS</span> 获得冠军。可是几天后，我惊奇的发现自己需<br>要面对强大的<span class="hljs-variable">IronGods</span> 了。<br><span class="hljs-variable">IronGods</span> 的组合与新<span class="hljs-variable">Proxima</span> 惊人得相似，<span class="hljs-variable">IronGods</span> 的<span class="hljs-variable">OpenGL</span> 与<span class="hljs-variable">ahyangyi</span> 还<br>有我和<span class="hljs-variable">zhuzeyuan</span> 都是<span class="hljs-variable">TopCoder</span> 上的<span class="hljs-variable">Target</span>（中国一共有<span class="hljs-number">7</span> 个<span class="hljs-variable">Target</span>，另外<span class="hljs-number">3</span> 个<br>是前辈<span class="hljs-variable">haha</span>，<span class="hljs-variable">lympanda</span> 和<span class="hljs-variable">ZCS</span> 队中的<span class="hljs-variable">yuhch123</span>，看好<span class="hljs-variable">zhoujie</span> 成为第<span class="hljs-number">8</span> 个，加油<br>呀！），他们的编程能力与我和<span class="hljs-variable">zhuzeyuan</span> 不相上下。从<span class="hljs-variable">TopCoder</span> 的成绩上看，<br>我们两人的速度略快。<br>另一名队员<span class="hljs-variable">ghy</span> 和<span class="hljs-variable">zhouyuan</span> 都很擅长思考算法，<span class="hljs-variable">ghy</span> 结束<span class="hljs-variable">OI</span> 时间比较短，状<br>态保持得很好，<span class="hljs-variable">zhouyuan</span> 对于深入的算法了解比较扎实（北京的<span class="hljs-variable">A</span> 很赞呀！）。<br>从配合上说，<span class="hljs-variable">IronGods</span> 组队时间长，配合方面比我们默契许多。我们重组后<br>虽然也进行了一些训练，不过在比赛中普遍交流偏少，特别是我和<span class="hljs-variable">zhouyuan</span> 的交<br>流，在后几场比赛中才有些成功的配合。<br>不过从稳定性角度看，我们稍占上风，<span class="hljs-variable">TopCoder</span> 上的<span class="hljs-variable">Volatility</span> 值至少可以说<br>明一些。而且<span class="hljs-variable">ACM</span> 比赛时间长达<span class="hljs-number">5</span> 小时，稳定性的要求应该比<span class="hljs-variable">TopCoder</span> 还高一些。<br>清华校内<span class="hljs-variable">PK</span>：<br>后来，<span class="hljs-variable">zhuzeyuan</span> 代表<span class="hljs-variable">Proxima</span> 与<span class="hljs-variable">IronGods</span> 协商之后，大家决定采用三局两胜<br>的赛制，并定下了<span class="hljs-number">3</span> 场比赛的时间和题目安排。<br>关于总决赛队伍的选拔，我个人非常不赞成直接指定，可能与我的一些经历<br>有关吧。已经进入研究生学习的我，对参加总决赛已经没有两三年前的激情了。不<br>过我个人的观点是，如果学校指定，我对于<span class="hljs-number">4</span> 种结果都可以接受；如果进行<span class="hljs-variable">PK</span> 选<br>拔，赛场上我一定拼尽全力。<br>两场<span class="hljs-variable">PK</span> 过程中，我们都在<span class="hljs-variable">bbs</span><span class="hljs-operator">.</span><span class="hljs-variable">pku</span> 上发布了现场的即时排名情况。由于清华<br><span class="hljs-variable">ACM</span> 团队有严格规定要求对两次<span class="hljs-variable">PK</span> 中使用的题目保密，我这里就只留下了比赛的<br>大致过程。<br>第一场<span class="hljs-variable">PK</span>，时间和吉隆坡赛区完全相同，过程大致如下：<br><span class="hljs-variable">Proxima</span> 启动比较快，到<span class="hljs-number">2</span> 小时左右就获得了<span class="hljs-number">5</span><span class="hljs-operator">:</span><span class="hljs-number">2</span> 的领先优势。<br>题<span class="hljs-variable">F</span> 是这场比赛中我们最大的失误，<span class="hljs-variable">F</span> 浪费了很多时间，而且最后都没有过。<br><span class="hljs-variable">IronGods</span> 利用<span class="hljs-variable">Proxima</span> 卡住<span class="hljs-variable">F</span> 的时机连追<span class="hljs-number">4</span> 题，以<span class="hljs-number">6</span><span class="hljs-operator">:</span><span class="hljs-number">5</span> 反超。<br>发现<span class="hljs-variable">IronGods</span> 反超之后，我又尝试了几次<span class="hljs-variable">F</span> 题，但还是不能通过。比赛还有<br><span class="hljs-number">70</span> 分钟结束，而且我们手上并没有其他题目。<span class="hljs-variable">zhuzeyuan</span> 在关键时候毅然决定开始<br>写<span class="hljs-variable">J</span>，记得他说的一句话是“没有时间了，我必须开始写了”，当时形势不容乐观。<br>好在<span class="hljs-variable">J</span> 成功<span class="hljs-number">1</span><span class="hljs-variable">Y</span>，士气大振。<br><span class="hljs-variable">Proxima</span> 随后连过两题重新占据<span class="hljs-number">7</span><span class="hljs-operator">:</span><span class="hljs-number">6</span> 优势。<br>最后，<span class="hljs-variable">IronGods</span> 追成<span class="hljs-number">7</span><span class="hljs-operator">:</span><span class="hljs-number">7</span> 平，比赛又打得难解难分。<br><span class="hljs-variable">IronGods</span> 最后时刻也还有机会，我们又一次目睹了<span class="hljs-variable">IronGods</span> 的绝地反击实力，<br>可能他们最后做<span class="hljs-variable">H</span> 的选择值得商榷。<br>第一场<span class="hljs-variable">PK</span> 过程中两支队都有明显失误的时期，我们由于失误在中期，所以罚<br>时较少。最后依靠罚时险胜，在<span class="hljs-variable">PK</span> 中占得先机。<br>第二场<span class="hljs-variable">PK</span>，时间设在<span class="hljs-number">12</span> 月<span class="hljs-number">25</span> 日的晚上进行，题目编号从<span class="hljs-variable">A</span> 到<span class="hljs-variable">L</span>，共有<span class="hljs-number">12</span> 题<br>之多。第二场<span class="hljs-variable">PK</span> 比前一场进行得更激烈，过程中两支队伍都长时间保持了很好的<br>状态，比赛过程中多次交换领先位置：<br>开局<span class="hljs-variable">Proxima</span> 起步略快，<span class="hljs-number">65</span> 分钟就通过了<span class="hljs-number">5</span> 题<span class="hljs-variable">BDEFK</span>。<br>开局看似顺利，不过我们都明白：真真的比拼还没有开始。<br><span class="hljs-variable">Proxima</span> 卡在了<span class="hljs-variable">H</span> 和<span class="hljs-built_in">C</span> 上，<span class="hljs-variable">IronGods</span> 通过了<span class="hljs-variable">BCDFK</span> 追成<span class="hljs-number">5</span><span class="hljs-operator">:</span><span class="hljs-number">5</span> 平，罚时<span class="hljs-variable">Proxima</span><br>领先。<br><span class="hljs-variable">IronGods</span> 通过了<span class="hljs-variable">G</span>，首次反超<span class="hljs-number">6</span><span class="hljs-operator">:</span><span class="hljs-number">5</span>。<br><span class="hljs-variable">Proxima</span> 经过<span class="hljs-variable">rejudge</span> 通过了<span class="hljs-variable">H</span>，出现了<span class="hljs-number">6</span><span class="hljs-operator">:</span><span class="hljs-number">6</span> 平，罚时<span class="hljs-variable">Proxima</span> 领先。<br><span class="hljs-variable">Proxima</span> 第<span class="hljs-number">10</span> 次提交才通过了<span class="hljs-built_in">C</span>，再次获得题数领先<span class="hljs-number">7</span> <span class="hljs-operator">:</span><span class="hljs-number">6</span>。<br>如果输掉了这次<span class="hljs-variable">PK</span>，题<span class="hljs-built_in">C</span> 则是最大的败笔。<br><span class="hljs-variable">IronGods</span> 通过了<span class="hljs-variable">J</span>，追成<span class="hljs-number">7</span><span class="hljs-operator">:</span><span class="hljs-number">7</span> 平，<span class="hljs-variable">IronGods</span> 在罚时上领先。<br>此时的罚时落后就是<span class="hljs-variable">Proxima</span> 在<span class="hljs-built_in">C</span> 题上出错<span class="hljs-number">9</span> 次的恶果。<br><span class="hljs-variable">Proxima</span> 第<span class="hljs-number">4</span> 次提交才通过<span class="hljs-variable">G</span>，以<span class="hljs-number">8</span><span class="hljs-operator">:</span><span class="hljs-number">7</span> 反超，但罚时还是很大。<br><span class="hljs-variable">IronGods</span> 通过了<span class="hljs-variable">H</span>，又追成<span class="hljs-number">8</span><span class="hljs-operator">:</span><span class="hljs-number">8</span> 平，利用罚时<span class="hljs-variable">IronGods</span> 再次获得领先。<br>这已经是第<span class="hljs-number">6</span> 次出现平分了。这时还不到<span class="hljs-number">3</span> 个小时，校内<span class="hljs-variable">PK</span> 赛的题目难度并<br>不在<span class="hljs-number">2008</span> 杭州赛区的难度之下，<span class="hljs-number">3</span> 小时的<span class="hljs-number">8</span><span class="hljs-operator">:</span><span class="hljs-number">8</span> 的高比分平局是现场比赛中很难看<br>到的。而在高比分平局中罚时也是很重要的，此时<span class="hljs-variable">IronGods</span> 占据明显的优势。<br><span class="hljs-variable">Proxima</span> 经过<span class="hljs-variable">rejudge</span> 通过了<span class="hljs-built_in">I</span>，再次超出<span class="hljs-number">9</span><span class="hljs-operator">:</span><span class="hljs-number">8</span>。<br><span class="hljs-variable">Proxima</span> 通过了<span class="hljs-variable">J</span>，优势扩大到<span class="hljs-number">10</span><span class="hljs-operator">:</span><span class="hljs-number">8</span>。<br>记得题<span class="hljs-variable">J</span> 的第一次提交开始的返回结果是“<span class="hljs-variable">Other</span><span class="hljs-operator">-</span><span class="hljs-variable">Contact</span> <span class="hljs-variable">Staff</span>”，看到这个回<br>复之后<span class="hljs-variable">zhuzeyuan</span> 马上跑到<span class="hljs-variable">Judge</span> 室，在被工作人员挡住之后，<span class="hljs-variable">zhuzeyuan</span> 很奇怪<br>地问道“难道不是你们让我来<span class="hljs-variable">Contact</span> 的吗？”，囧死了。不过很快就<span class="hljs-variable">rejudge</span> 成<br><span class="hljs-variable">Yes</span> 了，题<span class="hljs-variable">J</span> 的通过也从一定意义上逆转了罚时的不利，<span class="hljs-variable">IronGods</span> 如果想翻盘就必<br>须在最后一小时重新上演北京赛区封版通过<span class="hljs-number">3</span> 题一幕。<br><span class="hljs-variable">Proxima</span> 通过了<span class="hljs-variable">A</span>，优势扩大到<span class="hljs-number">11</span><span class="hljs-operator">:</span><span class="hljs-number">8</span>。<br>记得最后提交<span class="hljs-variable">A</span> 题的时候，我紧张得手都有些发抖了。当时只剩下<span class="hljs-number">25</span> 分钟，<br><span class="hljs-variable">IronGods</span> 还没有开始写<span class="hljs-variable">A</span> 和<span class="hljs-variable">L</span> 两题，所以在最后的时间里他们已经不可能通过余下<br>的<span class="hljs-number">4</span> 题了。<span class="hljs-variable">A</span> 题的<span class="hljs-variable">Yes</span> 也就成为了这场<span class="hljs-variable">PK</span> 的胜利宣言。<br><span class="hljs-variable">IronGods</span> 最后时刻通过了<span class="hljs-built_in">I</span>，最终题数为<span class="hljs-number">11</span><span class="hljs-operator">:</span><span class="hljs-number">9</span>。<br>此次校内<span class="hljs-variable">PK</span> 的激烈程度决不亚于<span class="hljs-number">2006</span> 年上海赛区，能够最终赢得这场<span class="hljs-variable">PK</span> 使<br>得我们更有自信地站在总决赛的现场。<br>首先感谢关心我们的同学，记得第一场<span class="hljs-variable">PK</span> 当天正在举行吉隆坡赛区比赛，<br><span class="hljs-variable">bbs</span><span class="hljs-operator">.</span><span class="hljs-variable">pku</span> 上还是出现了如此多的帖子为我们双方加油。第二场<span class="hljs-variable">PK</span> 结束时已经是晚上<br><span class="hljs-number">11</span> 点，我们手机还不断收到祝贺短信。<br>向<span class="hljs-variable">IronGods</span> 三位天王致敬，在<span class="hljs-variable">PK</span> 过程中只需略微的变化，出现在斯德哥尔摩<br>的就很可能是你们。棋逢对手是我<span class="hljs-variable">ACM</span> 生涯的一大幸事，相信你们明年一定能够<br>做得更好。<br>我想这是清华第一次使用公开的现场<span class="hljs-variable">PK</span> 方式来选拔总决赛队伍，个人觉得<span class="hljs-variable">PK</span><br>的方式除了公平之外还有许多优点。首先，<span class="hljs-variable">PK</span> 方式可以使得各队伍能够更从容地<br>选择和准备不同的分区赛赛区，有效提高学校的总体成绩。其次，通过<span class="hljs-variable">PK</span> 的过程，<br>可以加强各队之间的交流，队伍各方面水平能够得到全面提高。真是一举两得。<br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个回顾，包括<br>今天一共<span class="hljs-number">10</span> 篇。接下来的重要比赛就是世界总决赛了，纵观世界总决赛各队，虽然形势不容<br>乐观，但我们一定会拼尽全力。<br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个回顾。<br>回顾<span class="hljs-variable">GCJ2006</span>，<span class="hljs-variable">ACM2005</span>，<span class="hljs-variable">TCCC2006</span> 和<span class="hljs-variable">ACM2006</span> 之后，今天简要回顾一下国内个<br>人赛场吧。<br>国内个人赛场——百度之星<br>国内个人赛场中最重要的比赛要数每年一度的百度程序设计大赛，到今年为<br>止已经举办了<span class="hljs-number">4</span> 届，每一届我都全身心地参加了比赛的全过程，百度程序设计大<br>赛是中国举办的规模最大的公开程序设计比赛，其参加人数比许多世界范围的程序<br>设计大赛的人数还要多得多。另外在<span class="hljs-number">2006</span> 年初，<span class="hljs-variable">Google</span> <span class="hljs-variable">Beijing</span> 举行了<span class="hljs-variable">Google</span><br><span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span> <span class="hljs-variable">China</span> 的比赛，刚刚开始参加<span class="hljs-variable">TopCoder</span> 的我也加入了这次<span class="hljs-variable">GCJC</span> 之旅。<br>第一届<span class="hljs-variable">baidu</span> 程序设计大赛：<br>最早的国内个人程序设计比赛要回忆到<span class="hljs-number">2005</span> 年<span class="hljs-number">9</span> 月开始的第一届百度程序设<br>计大赛了，源于宿舍走廊中的海报，我以尝试的心态报名参加了第一届百度程序设<br>计大赛。每一届百度程序设计大赛都由初赛，复赛和现场决赛组成。<br>第一届百度程序设计大赛中，印象最深的复赛题目就是那道规模巨大的最小<br>树形图问题了，<span class="hljs-number">100000</span> 的数据规模吓退了不少选手，我鼓足勇气提交了一个理论<br>上能够运行的程序，顺利通过了复赛进入决赛。最小树形图算法在大多图论书上就<br>接在最小生成树算法后面，但是其程序量远比最小生成树大，而且用途没有最小生<br>成树广泛，在大多数竞赛中很少出现。我最早接触最小树形图算法是在<span class="hljs-number">2003</span> 年<span class="hljs-number">4</span><br>月，当时正在复旦大学训练，记得关于这个问题和<span class="hljs-variable">xreborner</span> 讨论了很长时间才得<br>以证明算法的正确性并实现出高效的程序。<br>现场决赛于<span class="hljs-number">2005</span> 年<span class="hljs-number">10</span> 月底在北京举行，由于当年比赛的知名度不高，时间<br>上还和<span class="hljs-variable">GCJ</span> 冲突，没有太多的顶尖高手参加。清华大学除我之外只有<span class="hljs-variable">superzn</span>（张<br>宁，我们留<span class="hljs-variable">shell</span> 一个人参加<span class="hljs-variable">ACM</span> 北京赛区预赛<span class="hljs-operator">&amp;</span><span class="hljs-type">#1</span><span class="hljs-number">048623</span><span class="hljs-operator">;</span>），当时<span class="hljs-variable">OpenGL</span> 还是以高中生<br>身份参加的，还有复旦大学的<span class="hljs-variable">xreborner</span> 和<span class="hljs-variable">young</span>（李阳）；中山大学的<span class="hljs-variable">magicpig</span>，<br><span class="hljs-variable">Savior</span> 和张子臻（不好意思，我不记得您的<span class="hljs-variable">ID</span> 了，好像杭州<span class="hljs-number">2008</span> 的时候我们还说<br>起此事）。我一直认为，现场比赛过程的一个重要的意义在于提供了一个老朋友重<br>逢和结实新朋友的机会，选手之间的交流是比赛中最重要的组成部分之一，我很有<br>幸能够在这些比赛中认识了众多牛人。<br>稍微回顾一下决赛的题目吧：决赛的题目是经典的<span class="hljs-number">8</span> 数码问题，给定初始状<br>态和结束状态，计算最短需要的转移步数。对于分数相同的情况，按照程序的运行<br>速度排名。比较容易想到的方法有：<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span> 单向<span class="hljs-variable">BFS</span>：最坏情况需要<span class="hljs-number">1</span><span class="hljs-variable">s</span> 左右。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span> 双向<span class="hljs-variable">BFS</span>：如果先判断无解情况，这是<span class="hljs-variable">xreborner</span> 使用的方法，平均情况<br>大概<span class="hljs-number">0.002</span> 秒左右。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span> <span class="hljs-variable">A</span><span class="hljs-operator">*</span>或者<span class="hljs-variable">IDA</span><span class="hljs-operator">*</span>：先判断无解情况，然后通过距离启发函数搜索。平均情况<br>大概<span class="hljs-number">0.002</span> 秒左右。我当时使用了<span class="hljs-variable">A</span><span class="hljs-operator">*</span>的方法，但许多地方的实现不是很合<br>理。<br><span class="hljs-punctuation">(</span><span class="hljs-number">4</span><span class="hljs-punctuation">)</span> 常量表，这是最有挑战的方法，因为决赛的提交量限制在<span class="hljs-number">64</span><span class="hljs-built_in">K</span> 以内。<br>现场比赛中，<span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span>和<span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span>的使用人数比较多，速度相差无几，选手之间比拼的是<br>各种细节和常数的处理。后来，我想出了一种速度非常快的方法：<br>首先使用<span class="hljs-variable">A</span><span class="hljs-operator">*</span>加上“卡节点”技术，就是限制<span class="hljs-variable">A</span><span class="hljs-operator">*</span>算法搜索过程中每层的节点个<br>数上限，这种算法扩展节点个数在<span class="hljs-number">100</span> 左右。然后，由于上述算法的正确性不能<br>保证，把所有反例打成常量，程序大概<span class="hljs-number">50</span><span class="hljs-built_in">K</span> 左右。很容易发现，这个程序的速度<br>远比比赛过程中所有程序的速度都快得多。<br>最终我的程序以总时间<span class="hljs-number">0.022</span> 秒获得冠军，<span class="hljs-variable">xreborner</span> 和<span class="hljs-variable">Savior</span> 以<span class="hljs-number">0.026</span> 分并列<br>第二名。<span class="hljs-variable">xreborner</span> 的程序很可惜，如果加入了无解判断，速度应该比我程序块，<br><span class="hljs-variable">superzn</span> 就更可惜了，<span class="hljs-variable">superzn</span> 的飘逸程序其实只有<span class="hljs-number">0.020</span> 秒，但是有一个数据错了。<br>记得颁奖之后，主持人邀请获奖选手发言，选手可以通过向前走一步选择优<br>先发言。这时，我突然感觉大家把目光都聚焦到了我身上，向右一看，由于我站在<br>最左边没有注意到右边的情况，可谁知其他选手都后退了一步，把我留在了看似向<br>前一步的位置。<br>第二届<span class="hljs-variable">Astar</span><span class="hljs-operator">-</span><span class="hljs-variable">baidu</span> 程序设计大赛：<br>第二届百度程序设计大赛没有等到<span class="hljs-number">10</span> 月，而是在<span class="hljs-number">2006</span> 年<span class="hljs-number">6</span> 月就拉开序幕。<br>没有想到的是，第二届百度程序设计大赛竟然以我在一年前比赛中使用的<span class="hljs-variable">A</span><span class="hljs-operator">*</span>算法<br>的名字命名，感到非常荣幸。<br>记得复赛的题目非常正式，印象最深的要数<span class="hljs-variable">xreborner</span> 招牌式的<span class="hljs-variable">Zuma</span>，我推<br>了两个小时公式才得到了正确的动态规划方程，实现之后还由于<span class="hljs-variable">TLE</span> 只有<span class="hljs-number">30</span> 分<br><span class="hljs-punctuation">(</span><span class="hljs-number">100</span> 满分<span class="hljs-punctuation">)</span>。还有<span class="hljs-variable">Ying</span> 出的无向图最小割问题，我用网络流算法又超时了。不过最<br>后一题，我的程序竟然比<span class="hljs-variable">xreborner</span> 优化过的标程还快，真是不容易呀。清华的舍<br>友<span class="hljs-variable">RealPlayer</span> 在复赛中表现很兴奋，可惜由于一个很小的错误没能进入决赛。<br>参加第二次百度决赛的选手中有许多熟悉的面孔，清华的同学包括<span class="hljs-variable">shell</span>，<br><span class="hljs-variable">OpenGL</span>，<span class="hljs-variable">lympanda</span> 还有<span class="hljs-variable">Macsy</span>。复旦大学也来了很多选手，其中除了<span class="hljs-variable">LemonTree</span><br>和<span class="hljs-variable">Topkiller</span>（沈毅）之外，还有我刚到复旦时见过的<span class="hljs-variable">admin</span> 和<span class="hljs-variable">funny</span> 的身影。另外<br><span class="hljs-variable">magicpig</span> 和<span class="hljs-variable">flymouse</span> 也参加了，而且<span class="hljs-variable">magicpig</span> 和我住一个房间，吃饭时记得他把<br>桌上所有人的<span class="hljs-variable">Dev</span> 功底全都鄙视了一遍，可惜<span class="hljs-variable">PE</span> 不在场呀。比赛前还看到了<br><span class="hljs-variable">Srbga</span> 的身影，据他说是被邀请一起来玩的，其实稍微用小脑判断一下就知道一定<br>是参与出题的，有了<span class="hljs-variable">Srbga</span> 的加盟，相信决赛题目绝对不会是一年前的风格了。<br>第二年决赛的题目是：著名的俄罗斯方块。写程序玩一个<span class="hljs-number">10</span> 列的标准<span class="hljs-number">2</span> 维俄<br>罗斯方块游戏。<br><span class="hljs-variable">Srbga</span> 设计了很有特色的记分方法和评分标准。对于记分方法，特别的地方是<br>消去<span class="hljs-number">1</span> 行后没有得分，而同时消去<span class="hljs-number">2</span>，<span class="hljs-number">3</span>，<span class="hljs-number">4</span> 行的得分分别是<span class="hljs-number">3</span>，<span class="hljs-number">6</span>，<span class="hljs-number">10</span>，记分方法<br>非常鼓励一次消去多行。评分标准则更奇怪了，有<span class="hljs-number">50</span> 种不同规模的数据，对于每<br>组数据对所有选手的得分进行排名，前<span class="hljs-number">8</span> 名的选手依次得到<span class="hljs-number">10</span>，<span class="hljs-number">7</span>，<span class="hljs-number">6</span>，<span class="hljs-number">5</span>，<span class="hljs-number">4</span>，<span class="hljs-number">3</span>，<br><span class="hljs-number">2</span>，<span class="hljs-number">1</span> 分，也就是说，是存在可能性在测试结束之后分数仍然为<span class="hljs-number">0</span> 的。<br>比赛过程中，我花了许多时间来分析这个奇怪的评分标准。<br>对于这种评分标准，常见的策略有两大类：<span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span>所有数据的成绩比较平均 <span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span>在<br>一种数据风格中特别突出呢。<br>根据数据描述，<span class="hljs-number">50</span> 个数据可以分为<span class="hljs-number">10</span> 种不同的风格。参加比赛的总共有<span class="hljs-number">50</span><br>名选手，如果所有分数是完全平均分配的话，分数是<span class="hljs-number">31</span> 分，这个数字意义不大。<br>但如果设想分数的<span class="hljs-number">80</span><span class="hljs-operator">%</span>会分配在前<span class="hljs-number">10</span> 名中（根据当时选手的水平，这个假设还是<br>比较合理的），这样前<span class="hljs-number">10</span> 名的平均分数是<span class="hljs-number">124</span> 分左右，也就是说如果想挤进前<span class="hljs-number">4</span>，<br>至少也要<span class="hljs-number">100</span> 分以上，如果想争取冠军估计需要<span class="hljs-number">200</span> 分左右。如果选择一种策略，<br>使得它只在一种数据风格中特别突出，分数只有可怜的<span class="hljs-number">50</span> 分，而且很可能有许多<br>有同样想法的选手，所以<span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span>不太可取。<br>在决定选择比较平衡的策略<span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span>的之后，需要再考虑一个问题，如果最终目标<br>是<span class="hljs-number">150</span> 分，那么平均分数只需要<span class="hljs-number">3</span> 分，也就是说每个数据可以允许有<span class="hljs-number">5</span> 名选手超<br>过自己。这些必要的分析帮助我明确了努力的方向，面对这种开放性的题目，多分<br>析题目的特点往往可以达到事半功倍的效果。<br>还有一个重要环节是调整估价函数，机器学习其实是一个很好的策略，可惜<br>我当时不会。其实当时我做的事情，本质上就是人工模拟机器学习，手工调整了<span class="hljs-number">1</span><br>个半小时，眼都花了。而且我犯下了一个致命的错误，记得记分方法非常鼓励一次<br>消去多行，也就是说对于平坦的数据，一次消去<span class="hljs-number">1</span><span class="hljs-operator">-</span><span class="hljs-number">3</span> 行的权值应该可能设置为负数，<br>而我只把他们设成了<span class="hljs-number">0</span>，使得程序对于平坦的数据分数不高。<span class="hljs-variable">Macsy</span> 就考虑到了这<br>一点，只可惜一个很奇怪的技术问题（在<span class="hljs-variable">Linux</span> 和<span class="hljs-variable">Windows</span> 下的<span class="hljs-type">CLOCKS_PER</span><span class="hljs-type">_SEC</span><br>参数是不一样大的，想使用卡时策略时千万不能事先把这个数字取出来设置成<br><span class="hljs-variable">CONST</span>）使得<span class="hljs-variable">Macsy</span> 没能成功。<br>由于<span class="hljs-variable">Macsy</span> 和<span class="hljs-variable">LemonTree</span>（同样的技术问题）的出局，我在许多数据中得到了<br>很高的分数，最后的总分达到了是<span class="hljs-number">255</span>，领先了第<span class="hljs-number">2</span> 名有<span class="hljs-number">99</span> 分之多。其实现场的<br>许多选手的程序风格相差并不大，可能我唯一多做的事情就是建立了一个博弈树，<br>多搜索两层，这样比直接贪心的程序看得更远一些。后来事实也证明了，排名靠前<br>的选手大多都是比较平衡的策略。记得<span class="hljs-variable">lympanda</span> 洋洋洒洒写了<span class="hljs-number">1800</span> 多行程序，<br>在其中一种数据中拿到了满分<span class="hljs-number">50</span> 分。不过可惜<span class="hljs-variable">panda</span> 的程序平衡性稍差，总排名<br>进入了前<span class="hljs-number">10</span>，但最终只有三等奖。<br>第二届<span class="hljs-variable">astar</span><span class="hljs-operator">-</span><span class="hljs-variable">baidu</span> 程序设计大赛，复旦大学获得了丰收。记得许多复旦的选<br>手由于考试提前回到学校，颁奖仪式的时候二等奖颁奖一片空场。<br>比赛的住宿条件可以用无与伦比来形容，很感谢<span class="hljs-variable">baidu</span> 的大方与细心。记得第<br>一天晚上还有机会和<span class="hljs-variable">Ikki</span> 一起打沙壶球，面对球风完全对立的<span class="hljs-variable">Ikki</span> 玩得很开心。<br><span class="hljs-variable">Google</span> <span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span> <span class="hljs-variable">China</span> <span class="hljs-number">2006</span><br>大概是<span class="hljs-number">2005</span> 年末，突然看到了名为<span class="hljs-variable">GCJC</span> 的比赛，而且使用的是<span class="hljs-variable">TopCoder</span> 的<br>比赛模式，于是就报名参加了。当时估计只参加过几场<span class="hljs-variable">TopCoder</span> 的比赛，帐号还<br>是蓝色的，<span class="hljs-variable">GCJC</span> 第二轮预选赛由于经验不足差一点就被淘汰了。好在有惊无险地<br>进入到了北京的现场赛。<br><span class="hljs-variable">GCJC</span> 现场的选手中，我觉得至少认识<span class="hljs-number">80</span><span class="hljs-operator">%</span>吧，清华同学就有<span class="hljs-number">7</span> 人：<span class="hljs-variable">b142857</span>，<br><span class="hljs-variable">fuwenjie</span>，<span class="hljs-variable">lympanda</span>，<span class="hljs-variable">Macsy</span>，<span class="hljs-variable">zig</span> 还有<span class="hljs-variable">hyyylr</span>（李老师），复旦的<span class="hljs-variable">LemonTree</span> 和<br><span class="hljs-variable">TopKiller</span> 也都来了，浙大也来了许多<span class="hljs-variable">TopCoder</span> 上的元老<span class="hljs-variable">xuchuan</span>（徐串），<br><span class="hljs-variable">sghao126</span>。<br>记得，就在<span class="hljs-variable">GCJC</span> 决赛的前一天晚上，我参加了<span class="hljs-variable">TopCoder</span> 的<span class="hljs-variable">SRM</span> 比赛，第一<br>次踩住了<span class="hljs-variable">Petr</span>，不过也消耗了太多的<span class="hljs-variable">RP</span>。晚上的<span class="hljs-variable">SRM</span> 比赛中没有人过<span class="hljs-number">3</span> 题，第二<br>天早上<span class="hljs-variable">lympanda</span> 还把我们统统鄙视了一遍。随后，<span class="hljs-variable">b142857</span> 还描述他<span class="hljs-variable">Challenge</span> 过<br>程中的囧事，由于<span class="hljs-number">500</span> 分题目的返回结果需要使用<span class="hljs-variable">long</span> <span class="hljs-variable">long</span> 类型，所以<span class="hljs-variable">b142857</span><br>看到一个人提交的程序计算过程中只使用了<span class="hljs-variable">long</span> 就果断<span class="hljs-variable">Challenge</span> 了，结果失败了<br>两次之后才发现，那个人用的语言是<span class="hljs-variable">Java</span>。<br>比赛中<span class="hljs-number">250</span> 分题目，简单的概率问题。我写完就交了<span class="hljs-number">224</span> 分，竟然是所有选<br>手中最快的。后面的<span class="hljs-number">500</span> 分，我虽然提交是最快的，不过没有考虑一种情况。打<br>开<span class="hljs-number">1000</span> 分题目之后网络就开始很不稳定了，时断时连，<span class="hljs-number">1000</span> 分题目其实算法很清<br>楚，由于网络原因提交只有<span class="hljs-number">600</span> 分左右了。<br><span class="hljs-variable">Challenge</span> 阶段开始时，我打开了房间中<span class="hljs-variable">lympanda</span> 的<span class="hljs-number">500</span> 分程序，发现我们两<br>人的程序基本过程完全一样。又打开了一个，也一样。但是在还没有反应过来的时<br>候，<span class="hljs-variable">lympanda</span> 的<span class="hljs-number">500</span> 分程序被<span class="hljs-variable">Challenge</span> 了，接着我的<span class="hljs-number">500</span> 分也被<span class="hljs-variable">Challenge</span> 了。<br>然后就没有什么斗志了，在无奈中等待比赛结束。<br>比赛结束之后的午饭过程中，我正好坐在<span class="hljs-variable">Google</span> 中国掌门人李开复旁边。午<br>餐快结束时，李开复问起<span class="hljs-number">2</span> 个月前的百度程序设计大赛，突然，鬼使神差地直接<br>问我百度大赛的冠军是谁？这可是在<span class="hljs-variable">Google</span> 的老巢呀，抖死了。我当时真害怕他<br>听完回答之后直接把我赶下桌<span class="hljs-operator">:-</span><span class="hljs-variable">P</span>。<br>好在我的<span class="hljs-number">250</span> 分和<span class="hljs-number">1000</span> 分都<span class="hljs-variable">Pass</span> 了，由于<span class="hljs-variable">TopKiller</span> 的<span class="hljs-number">1000</span> 分超时了，我获<br>得了第<span class="hljs-number">3</span> 名。冠军<span class="hljs-variable">xuchuan</span> 和亚军<span class="hljs-variable">b142857</span> 都顺利通过了<span class="hljs-number">3</span> 题。<br><span class="hljs-variable">POJ</span> <span class="hljs-variable">Monthly</span> <span class="hljs-variable">Contest</span><br>大概是从<span class="hljs-number">2004</span> 年<span class="hljs-number">8</span> 月开始，<span class="hljs-variable">POJ</span> 上开始举行每月一次的有奖月赛。<span class="hljs-number">2005</span> 年的<br>月赛中，每次都有机会同<span class="hljs-variable">xreborner</span>，<span class="hljs-variable">Ying</span> 等高手切磋技艺。从<span class="hljs-number">2006</span> 年初开始，我<br>已经比较熟悉了比赛的题风，连续获得了许多次比赛的冠军，并且保持了良好的个<br>人比赛状态。<br>记得<span class="hljs-number">2006</span> 年<span class="hljs-number">4</span> 月底，在<span class="hljs-variable">POJ</span> 的邮箱里突然发现了<span class="hljs-variable">hawk</span> 的信，他问我五一长<br>假回家的情况。我告诉<span class="hljs-variable">hawk</span> 自己定在周五晚上出发。于是，第二天早上就看到比<br>赛安排中：<span class="hljs-number">2006</span> 年<span class="hljs-number">5</span> 月份月赛安排在了周五晚上，太囧了。<br>后来，<span class="hljs-variable">POJ</span> 上直接出现了一系列奇怪的定义，但其实结论就是我不能以正式身<br>份参加月赛了。现在这些定义早已成为笑料了，但是我不参加月赛之后，仍然有<br><span class="hljs-variable">ahyangyi</span> 这样的选手夺走了绝大多数的冠军。<br>后两届<span class="hljs-variable">baidu</span> 程序设计大赛：<br>从第二届开始，我们习惯了在每年<span class="hljs-number">6</span> 月等待<span class="hljs-variable">astar</span><span class="hljs-operator">-</span><span class="hljs-variable">baidu</span> 的开赛。<span class="hljs-number">2007</span> 年最出<br>乎意料的就要数<span class="hljs-variable">CS</span> 这个决赛题目了，我在关键的买枪环节犯了重要错误，太迷恋<br><span class="hljs-variable">AK47</span> 了。祝贺师兄<span class="hljs-variable">lympanda</span>，<span class="hljs-variable">Macsy</span> 还有<span class="hljs-variable">shell</span>，不愧是真金不怕火炼。<br>第四届百度大赛我参与了预赛和复赛的命题工作，但是没有参与决赛的命题。<br>决赛题目是一道关于直升机的题目，印象最深的是<span class="hljs-variable">ahyangyi</span> 使用了一个很有进攻<br>性的策略，如果采用淘汰赛，可能就是冠军了。对我来说，通过现场比赛，有机会<br>和老朋友重逢，并结识了许多新选手是我最大的幸事。<br>利用假期空闲之时，将这几年<span class="hljs-variable">GCJ</span>，<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 参加的一些重要比赛作个回顾。<br>今天总结一下国际个人赛场吧。<br>国际个人赛场——三大赛事<br><span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 总决赛结束后，<span class="hljs-variable">Mobile</span> <span class="hljs-variable">Robot</span> 就宣布解散了，也许唯一的遗憾就是<br>没能获得一个真正的世界冠军。宣布退役<span class="hljs-variable">ACM</span> 之后，我仍然连续参加了那之后的<br>每一场世界范围的现场编程比赛，按照时间先后分别是：<span class="hljs-variable">TopCoder</span> <span class="hljs-built_in">Open</span><span class="hljs-punctuation">(</span>简称<br><span class="hljs-variable">TCO</span><span class="hljs-punctuation">)</span><span class="hljs-number">2007</span>，<span class="hljs-variable">TopCoder</span> <span class="hljs-variable">Collegiate</span> <span class="hljs-variable">Challenge</span> <span class="hljs-punctuation">(</span>简称<span class="hljs-variable">TCCC</span><span class="hljs-punctuation">)</span><span class="hljs-number">2007</span>，<span class="hljs-variable">TCO2008</span> 以及<span class="hljs-variable">Google</span><br><span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span><span class="hljs-punctuation">(</span>简称<span class="hljs-variable">GCJ</span><span class="hljs-punctuation">)</span><span class="hljs-number">2008</span>。每次比赛，我都度过了一段美好快乐的时光。<br><span class="hljs-variable">TopCoder</span> 公司与三大赛事：<br><span class="hljs-variable">TopCoder</span> 公司大概在<span class="hljs-number">9</span> 年前成立，成立的原因有些让人匪夷所思，据说公司<br>创立者原来是另一家<span class="hljs-variable">IT</span> 公司的大股东，在把原来公司的股票转手之后换了一笔钱，<br>开设了<span class="hljs-variable">TopCoder</span> 公司。然而<span class="hljs-variable">Topcoder</span> 和原来的<span class="hljs-variable">IT</span> 公司有一个重要协议，就是<br><span class="hljs-variable">Topcoder</span> 在创立之初的两年内不得从事软件开发的工作。于是<span class="hljs-variable">TopCoder</span> 在前两年<br>时间内以类似竞赛的方式从事软件开发的活动。经过<span class="hljs-number">9</span> 年的发展，现在<span class="hljs-variable">TopCoder</span><br>公司已经基本由算法竞赛转向软件开发了。<br><span class="hljs-variable">TopCoder</span> 公司除了在网上举办<span class="hljs-variable">SRM</span> 之外，每年还举办<span class="hljs-variable">TCO</span> 和<span class="hljs-variable">TCCC</span> 等现场赛<br>事（当然还有<span class="hljs-variable">TCHS</span>，不过规模比较小，参与面也不是很大），<span class="hljs-variable">TCO</span> 和<span class="hljs-variable">TCCC</span> 分别在<br>每年的<span class="hljs-number">6</span> 月和<span class="hljs-number">11</span> 月举行，每次大赛都能汇聚众多国际编程高手。另外，<span class="hljs-variable">Google</span> 公<br>司从<span class="hljs-number">2000</span> 年开始，先在各大洲举办名为<span class="hljs-variable">Google</span> <span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span> 的比赛，从<span class="hljs-number">2002</span> 年开始<br>也举办全球范围的<span class="hljs-variable">Google</span> <span class="hljs-variable">Code</span> <span class="hljs-variable">Jam</span>。于是这些年来，大家一直把<span class="hljs-variable">TCO</span>，<span class="hljs-variable">TCCC</span> 和<br><span class="hljs-variable">GCJ</span> 称为三大赛事。<br><span class="hljs-number">2007</span> 年之前的<span class="hljs-variable">GCJ</span> 都是使用<span class="hljs-variable">TopCoder</span> 的比赛形式，<span class="hljs-variable">Topcoder</span> 的算法竞赛有点<br>类似于<span class="hljs-variable">IOI</span>，<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 之类的竞赛，题目是同一个类型的。每次比赛三道题目，一<br>般分数分配为<span class="hljs-number">250</span><span class="hljs-operator">-</span><span class="hljs-number">500</span><span class="hljs-operator">-</span><span class="hljs-number">1000</span>，比赛分为<span class="hljs-variable">Coding</span>，<span class="hljs-built_in">Rest</span>，<span class="hljs-variable">Challenge</span> 和<span class="hljs-variable">System</span> <span class="hljs-variable">Test</span> 四<br>个阶段，时间各是<span class="hljs-number">75</span> 分钟（现场比赛<span class="hljs-number">85</span> 分钟），<span class="hljs-number">5</span> 分钟，<span class="hljs-number">15</span> 分钟（现场比赛<span class="hljs-number">10</span><br>分钟）和不定。<br><span class="hljs-variable">TopCoder</span> 的现场比赛都由<span class="hljs-number">3</span> 个阶段组成：所有选手被分为<span class="hljs-number">3</span> 个组（称为<br><span class="hljs-variable">Room1</span>，<span class="hljs-number">2</span>，<span class="hljs-number">3</span>），每组分别进行半决赛，每组前<span class="hljs-number">2</span><span class="hljs-punctuation">(</span>或<span class="hljs-number">3</span><span class="hljs-punctuation">)</span>名直接晋级决赛，<span class="hljs-number">3</span><span class="hljs-operator">-</span><span class="hljs-number">6</span> 名晋<br>级 <span class="hljs-variable">wildcard</span> 比赛，<span class="hljs-variable">wildcard</span> 比赛<span class="hljs-number">12</span> 人中的前两名填补决赛的最后<span class="hljs-number">2</span><span class="hljs-punctuation">(</span>或<span class="hljs-number">1</span><span class="hljs-punctuation">)</span>个名额，<br>决赛由<span class="hljs-number">8</span><span class="hljs-punctuation">(</span>或<span class="hljs-number">10</span><span class="hljs-punctuation">)</span>名选手参加。由于三大赛事的比赛形式相 差不大，每次现场决赛<br>的选手中总是有许许多多熟悉的面孔。<br>三大赛事的波荡起伏：<br>可能细心的同学能够发现疑问，在文章最开始的一段中，我表明自己在<span class="hljs-number">2007</span><br>年之后没有错过任何现场赛事，那为什么没有<span class="hljs-variable">GCJ2007</span> 呢？其实原因很简单，<br><span class="hljs-variable">Google</span> 公司在<span class="hljs-number">2007</span> 年全年中只举办了面向美洲的比赛，没有举行面向全世界的公<br>开赛。<span class="hljs-variable">GCJ2007</span> 的搁浅也使得整个<span class="hljs-number">2007</span> 年只有<span class="hljs-variable">TopCoder</span> 公司独自举办世界大赛。<br>但是，当大家以为<span class="hljs-variable">GCJ</span> 将在记忆中淡去的时候，<span class="hljs-variable">GCJ2008</span> 重新登陆，而且新的<br>比赛环境与形式给选手以焕然一新的感觉。这里先谈谈自己对这种新比赛环境的看<br>法吧：<br><span class="hljs-variable">GCJ2006</span> 仍然使用的是<span class="hljs-variable">TopCoder</span> 标准形式，也就是说和<span class="hljs-variable">TCO</span> 以及<span class="hljs-variable">TCCC</span> 完全<br>一样，用一句话概括就是<span class="hljs-variable">Coding</span><span class="hljs-operator">-</span><span class="hljs-number">250</span><span class="hljs-operator">-</span><span class="hljs-number">500</span><span class="hljs-operator">-</span><span class="hljs-number">1000</span><span class="hljs-operator">-</span><span class="hljs-variable">Challenge</span><span class="hljs-operator">-</span><span class="hljs-variable">SystemTests</span>。<br><span class="hljs-variable">GCJ2008</span> 比赛环境结合了<span class="hljs-variable">ACM</span>，<span class="hljs-variable">TopCoder</span> 还有<span class="hljs-variable">IPSC</span><span class="hljs-punctuation">(</span><span class="hljs-variable">ipsc</span><span class="hljs-operator">.</span><span class="hljs-variable">ksp</span><span class="hljs-operator">.</span><span class="hljs-variable">sk</span><span class="hljs-punctuation">)</span>等多种比赛的<br>特色。<br><span class="hljs-punctuation">(</span><span class="hljs-number">1</span><span class="hljs-punctuation">)</span>每道题目分为<span class="hljs-variable">Easy</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span> 两组数据，并且数据可以下载到本地，这点好像与<br><span class="hljs-variable">IPSC</span> 很相似，另一个与<span class="hljs-variable">IPSC</span> 的共同点就是，不限制选手使用的编程工具，包<br>括肉眼观察或者人工搜索。<br><span class="hljs-punctuation">(</span><span class="hljs-number">2</span><span class="hljs-punctuation">)</span><span class="hljs-variable">Easy</span> 数据则和<span class="hljs-variable">ACM</span> 非常近似，即时提交评测，并且也设定了每次失败提交<br>加<span class="hljs-number">4</span> 分钟的罚时。<br><span class="hljs-punctuation">(</span><span class="hljs-number">3</span><span class="hljs-punctuation">)</span><span class="hljs-variable">Hard</span> 数据则更像<span class="hljs-variable">TopCoder</span> 的形式了，<span class="hljs-variable">Hard</span> 数据由于是统一评测，<span class="hljs-variable">System</span><br><span class="hljs-variable">Tests</span> 可以有效<br>地把悬念保留到最后一刻。<br><span class="hljs-variable">GCJ2008</span> 的比赛形式是一种大胆的尝试，并且也已经有了很理想的结果。<br>另外，值得称赞的是，<span class="hljs-variable">GCJ2008</span> 中首次使用了分各大洲进行当地现场半决赛的<br>赛制。使得排在前<span class="hljs-number">500</span> 名的选手得以参加各大洲的半决赛，也拉近了<span class="hljs-variable">Google</span> 公司<br>与选手之间的距离。从另一个角度来说，各大洲半决赛的方法很有效保证了决赛选<br>手的水平。平心而论，<span class="hljs-variable">TopCoder</span> 现场比赛前的最后一轮网络淘汰赛对选手的压力<br>很大，就连<span class="hljs-variable">Petr</span> 在<span class="hljs-number">2007</span> 年都直接来了一个“滑铁卢”，连现场赛都没有进。而现<br>场比赛的公平程度远超过网络赛，所以通过现场赛决定决赛选手可以一定程度上提<br>高决赛选手的水平，至少我个人很赞同这种做法。<br>搁浅的比赛无独有偶，可能是受到了<span class="hljs-number">2008</span> 年全球经济危机的影响，<span class="hljs-variable">TCCC2008</span><br>也停办了。而且我们都觉得，<span class="hljs-variable">TCCC2007</span> 很可能是<span class="hljs-variable">TopCoder</span> 举行的最后一次<span class="hljs-variable">TCCC</span><br>了，当然<span class="hljs-variable">TopCoder</span> 这样做没有不合理的地方。<br><span class="hljs-variable">TCO</span> 则相对稳定一些，就连每年举行的地点都不变，<span class="hljs-variable">TCO</span> 连续<span class="hljs-number">3</span> 年在著名的赌<br>城<span class="hljs-variable">Las</span> <span class="hljs-variable">Vegas</span> 举行。今年应该也不会改变地点。<br>三大赛事的举办，我觉得选手最大的受益就是，比赛提供了一个到美国免费<br>游玩的机会。我先后去过<span class="hljs-number">7</span> 次美国，其中<span class="hljs-number">6</span> 次都是参加编程比赛。通过比赛的机<br>会，我们得以开阔眼界，结交朋友。我个人真心希望三大赛事能够继续举行，但是<br><span class="hljs-number">2009</span> 年秋天的<span class="hljs-variable">TCCC</span> 和<span class="hljs-variable">GCJ</span> 很可能同时停办，这也是一个不可回避的问题，让我们<br>拭目以待吧。<br>美国之旅：<br>从<span class="hljs-number">2007</span> 年以来的<span class="hljs-number">4</span> 次现场比赛，虽然每次比赛过程中都有一些遗憾，但是现<br>在回想起来都有不尽的乐趣。<br><span class="hljs-variable">TCO2007</span> 是我第一次到达赌城，一下飞机就看到很多赌场<span class="hljs-punctuation">(</span><span class="hljs-variable">CASINO</span><span class="hljs-punctuation">)</span>，可谁知<br><span class="hljs-variable">TCO2007</span> 整个比赛过程就是一场巨大的赌博。我当时由于不熟悉<span class="hljs-variable">Texas</span> <span class="hljs-built_in">Hold</span><span class="hljs-operator">&#x27;</span><span class="hljs-variable">em</span> 的<br>规则，在半决赛中搞错了<span class="hljs-variable">Flush</span> 和<span class="hljs-variable">Straight</span> 的大小关系，结果初上赌场就倾家荡产<br>而被淘汰出局。<span class="hljs-variable">TopCoder</span> 比赛中竟然出赌博有关的题目，果然有<span class="hljs-variable">Las</span> <span class="hljs-variable">Vegas</span> 的特色<br>呀。不过在赌场里，我仔细研究了许多赌博游戏的规则，然后写了几个程序计算赌<br>博的期望，但是发现标准概率模型下所有游戏的期望值全是负数（其实挺显然的），<br>于是，也就以娱乐为目的和<span class="hljs-variable">lympanda</span> 切磋了一下。<br>如果说<span class="hljs-variable">TCCC2006</span> 的<span class="hljs-variable">Room1</span> 是中国的胜利，<span class="hljs-variable">TCO2007</span> 的<span class="hljs-variable">Room1</span> 则是中国的失败<br>了，虽然<span class="hljs-variable">Ying</span> 和<span class="hljs-variable">lympanda</span> 都进入了<span class="hljs-variable">wildcard</span>，可是都由于一些小失误输掉了这次<br>赌博。赛后<span class="hljs-variable">lympanda</span> 请我去牛排馆吃饭，后来那个牛排馆也成为每次<span class="hljs-variable">TCO</span> 比赛我<br>们中国选手的主要聚会地点。<br><span class="hljs-variable">TCCC2007</span> 的小组赛还比较顺利，我轻松击败了<span class="hljs-variable">gawry</span>，<span class="hljs-variable">Per</span>，<span class="hljs-variable">marek</span><span class="hljs-operator">.</span><span class="hljs-variable">cygan</span> 获得<br>小组第一挺进决赛。可是决赛中，我为了提高速度以超过<span class="hljs-variable">Petr</span>，再加上有些紧张，<br>最后<span class="hljs-number">500</span> 分和<span class="hljs-number">1000</span> 分两题又都挂了，落到了第<span class="hljs-number">5</span> 名。<span class="hljs-variable">TCCC2007</span> 地点设在了奥兰多，<br>比赛结束后我们到附近的<span class="hljs-variable">Disney</span> <span class="hljs-variable">Land</span> 去玩，那里的惊险游戏比国内刺激得多，有<br>些远远超过我的极限，我们一行人一直玩到深夜才返回。许多选手还一起到奥兰多<br>魔术队主场观看了<span class="hljs-variable">NBA</span> 现场比赛，可惜最后一节成为了垃圾时间。<br><span class="hljs-variable">TCO2008</span> 我也依靠飘逸的<span class="hljs-number">1000</span> 分题中<span class="hljs-number">800</span><span class="hljs-operator">+</span>分的提交闯入决赛。决赛前我还和<br><span class="hljs-variable">visualage</span> 聊天，夸耀自己从来没有所有题目全挂，更没有拿过负分。可是在随后<br>的决赛中，这两个“梦想”就都实现了，<span class="hljs-variable">PE</span> 对我的评价是太紧张了。基本每次<br><span class="hljs-variable">TopCoder</span> 现场比赛都能见到<span class="hljs-variable">PE</span>，谁知他每次怀疑我某些题目的正确性的时候，我<br>的程序就一定是错的，如果下次我参加决赛，您就不要再看我程序了吧（呵呵，开<br>个玩笑）。<br>不过在决赛<span class="hljs-variable">Challenge</span> 阶段的最后时刻，我从第一视角目睹了<span class="hljs-variable">Petr</span> 和<span class="hljs-variable">Tomek</span> 的<br>巅峰对决。在还有<span class="hljs-number">15</span> 秒钟结束时<span class="hljs-variable">Petr</span> 还落后<span class="hljs-variable">Tomek</span> 大概<span class="hljs-number">30</span> 分左右，<span class="hljs-variable">Petr</span> 成功<br><span class="hljs-variable">Challenge</span> 了一个超过了<span class="hljs-variable">Tomek</span>，但是<span class="hljs-variable">Tomek</span> 利用短短的<span class="hljs-number">10</span> 秒钟也提交了一个成<br>功<span class="hljs-variable">Challenge</span> 又超了回来，谁知<span class="hljs-variable">Petr</span> 得到这个信息之后又提交了一个<span class="hljs-variable">Challenge</span>，可<br>是运气稍差，如果那个数据用来<span class="hljs-variable">Challenge</span> 我的程序的话，<span class="hljs-variable">Petr</span> 就能够在最后<span class="hljs-number">1</span> 秒<br>再次夺回冠军的位置。能够到最后一秒还能有机会成功翻盘的一定是神一般的人物，<br>能够把神一般的人物逼到最后一秒的也一定是神一般的人物，两个神一般的人物你<br>来我往，为大家上演了一场精彩的比赛。<br>欧洲独霸：<br>又一次引用黄金雄教授在杭州<span class="hljs-number">2008</span> 时说的话，<span class="hljs-variable">ACM</span> 总决赛的实力分布由原先<br>的美洲独霸逐渐转向了现在的亚欧争霸。但是，我根据这些年的比赛结果发现，从<br><span class="hljs-number">2006</span> 年开始，团体比赛和个人比赛，特别是个人比赛，欧洲选手一直保持着绝对<br>的霸主地位，亚欧争霸的说法实在有些牵强。<br>从<span class="hljs-number">2005</span> 年开始，几乎所有三大赛事的冠军都是欧洲选手。成绩最好的要数俄<br>罗斯，俄罗斯选手以<span class="hljs-variable">Petr</span>，<span class="hljs-variable">andrewzta</span> 等为代表。俄罗斯选手训练刻苦，编程能力<br>极强。欧洲的另一霸主就是波兰，波兰选手具有很强的灵气，以<span class="hljs-variable">tomek</span>，<span class="hljs-variable">marek</span> 以<br>及<span class="hljs-variable">Eryx</span> 为代表，程序设计在他们手中体现出了艺术气息。<br>前几天我也看到关于取消<span class="hljs-variable">NOIP</span> 保送资格的文章，我没有发表评论，因为我没<br>有看懂，为什么文章里把保送和保送资格混为一谈，让人觉得哭笑不得。这里我对<br>保送资格还是想法不多，不过想比较一下我们中国选手与欧洲选手思维能力上的差<br>别。<br>在高中时，吴文虎老师就常说中国选手的<span class="hljs-variable">IOI</span> 成绩很优秀，的确这几年从<span class="hljs-variable">IOI</span><br>成绩上看，中国是绝对的霸主。可是<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-variable">ICPC</span> 的成绩，俄罗斯和波兰等强队的成<br>绩却远在中国之上。于是我们总结的原因是：欧洲选手的编程能力强。我非常同意<br>这个说法。<br>但是“欧洲选手的编程能力强”的说法并不说明他们的算法能力弱，相反他<br>们的思维素质非常高，他们具有非常正统和严密的思维方式，体现出经过长期训练<br>的思维能力和素质。<br>我 觉得中国的“高手”和许多通过高考进入名校的“神人”，在大学之前接<br>受的教育都是以选拔为目的的，并没有太多针对思维方式和能力的训练。记得小学<br>要考重点 初中，初中则拼搏重点高中，高中期间则梦想名牌大学，而在学习期间，<br>我们并没有太多机会训练自己的思维能力，至少在我的中学阶段是这样的。虽然很<br>多高中已 经竭尽全力通过类似研究性学习的方法锻炼我们的创新能力，但是仍然<br>不能改变选拔性考试“高考”这一事实。而在与西方选手交流的过程中，我觉得许<br>多思维能力 优秀的学生很早就有机会接受系统的思维能力训练，寻找最适合自己<br>的思考方法。我一次有机会看<span class="hljs-variable">Eryx</span> 留下的草稿，发现他考虑问题有非常严密的过<br>程，从理解题目到想出算法每步都有根有据，并不是随机碰撞的结果。<br>现在欧洲选手与我们相比，思维能力上也并没有劣势。我有幸在投身<span class="hljs-variable">OI</span> 竞赛<br>之后，得到许多机会与其它选手交流，学习他们的思考方法，努力锻炼自己这方面<br>的能力，试图与众多欧洲选手对抗。<br><span class="hljs-variable">Mountain</span> <span class="hljs-variable">View</span> 登顶：<br><span class="hljs-variable">GCJ2008</span> 在<span class="hljs-variable">Google</span> 总部<span class="hljs-variable">Mountain</span> <span class="hljs-variable">View</span> 举行，赛前我想用<span class="hljs-variable">Ying</span> 的一句话来表<br>达我对比赛夺冠的渴望，“我虽然获过很多奖，但是缺少一个世界冠军”。早在<br><span class="hljs-variable">GCJ2006</span>，我就拥有机会获得冠军，但是在失去那次机会之后一等就是整整的两年。<br>比赛开始不久，<span class="hljs-variable">bmerry</span> 的强势起跑使我逐渐失去了夺冠的念头，只得一心做<br>好眼前的题目。<span class="hljs-variable">bmerry</span> 在不到<span class="hljs-number">2</span> 个小时的时间里就做出了除了<span class="hljs-built_in">C</span><span class="hljs-operator">-</span> <span class="hljs-variable">Hard</span> 以外的所有<br>题目，他只要在最后一小时做出<span class="hljs-built_in">C</span><span class="hljs-operator">-</span> <span class="hljs-variable">Hard</span>，就基本上可以锁定冠军了。<br>不过我克服开场的不顺利之后，磕磕碰碰地在<span class="hljs-number">2</span> 小时过<span class="hljs-number">5</span> 分顺利通过了<span class="hljs-built_in">E</span><span class="hljs-operator">-</span><span class="hljs-variable">Easy</span><br>和<span class="hljs-built_in">E</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span>。摆在我面前的只有<span class="hljs-variable">B</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span> 和<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span>。<span class="hljs-variable">B</span> 题和<span class="hljs-built_in">C</span> 题相比之下，<span class="hljs-variable">B</span> 题我已<br>经有了一定的想法，可是<span class="hljs-built_in">C</span> 则是完全没有想法。于是我决定先做<span class="hljs-variable">B</span>，<span class="hljs-variable">GCJ2008</span> 的<span class="hljs-variable">B</span><br>题简直是我的克星，我先后用了<span class="hljs-number">100</span> 分钟时间做这题都没有结果，可以说当时状<br>态很差。大概到了<span class="hljs-number">2</span><span class="hljs-operator">:</span><span class="hljs-number">40</span> 的时候，我查看<span class="hljs-variable">board</span> 时突然发现了一件令人窒息的事情，<br><span class="hljs-variable">bmerry</span> 已经尝试了<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span> 并且超时了。由于<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span> 的分数略高于<span class="hljs-variable">B</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span>，我最后<br>想要超过<span class="hljs-variable">bmerry</span> 就必须做出<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span>。果断放弃<span class="hljs-variable">B</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span> 之后，并没有想出<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span><br>的方法，写了一个搜索程序但是心里很没底，<span class="hljs-variable">Hard</span> 数据的提交时限是<span class="hljs-number">8</span> 分钟，于<br>是到了<span class="hljs-number">2</span> 小时<span class="hljs-number">52</span> 分的时候，我毅然打开<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span>，用搜索的程序运行<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span>，在焦<br>急的等待之后，程序在运行了<span class="hljs-number">1</span> 分多钟以后神奇地运行结束了。我依靠搜索方法<br>通过了<span class="hljs-built_in">C</span><span class="hljs-operator">-</span><span class="hljs-variable">Hard</span>，一举超过了<span class="hljs-variable">bmerry</span>。<span class="hljs-number">1</span> 分钟后<span class="hljs-variable">zhuzeyuan</span> 也做出了同样的题目，超<br>过了<span class="hljs-variable">bmerry</span>，由于罚时排在第<span class="hljs-number">2</span> 名。我和<span class="hljs-variable">zhuzeyuan</span> 还有<span class="hljs-variable">bmerry</span> 比赛过程中都有<br>不小的失误，我很有幸把失误的损失降到了最低点，终于获得了第一个世界比赛的<br>冠军。<br>这次<span class="hljs-variable">GCJ</span> 的题目有非常详细的解答，可以在比赛的链接里找到。<span class="hljs-variable">GCJ2008</span> 的比<br>赛结果从一定意义上，打破了欧洲选手多年的独霸场面。加上原籍南非的<span class="hljs-variable">bmerry</span>，<br>前五名中都没有出现欧洲选手的名字，这也是在多年现场比赛中没有出现过的。<br>这一年，我很高兴看到<span class="hljs-variable">OI</span> 选手中出现了<span class="hljs-variable">ahyangyi</span>，<span class="hljs-variable">yuhch123</span>，<span class="hljs-variable">Loner</span> 等各方面<br>都极为出色的新人，真心希望你们能够早日适应大学的学习生活，再创佳绩。<br>众多新人的加盟，大大提高了清华<span class="hljs-variable">ACM</span> 团队的实力。在<span class="hljs-number">2008</span> 年，清华大学<br><span class="hljs-variable">ACM</span> 队创纪录地获得了<span class="hljs-number">4</span> 个分区赛的冠军。明天最后一篇回忆中将分享<span class="hljs-variable">ACM</span><span class="hljs-operator">-</span><span class="hljs-number">2008</span><br>中发生的趣事。<br>版权归<span class="hljs-variable">AC</span> <span class="hljs-variable">Rush</span>所有。本站仅为转载，感谢楼教主。<br></code></pre></td></tr></table></figure>

                
              </div>
            
            <hr/>
            <div>
              <div class="post-metas my-3">
  
    <div class="post-meta mr-3 d-flex align-items-center">
      <i class="iconfont icon-category"></i>
      

<span class="category-chains">
  
  
    
      <span class="category-chain">
        
  <a href="/categories/%E7%AE%97%E6%B3%95/" class="category-chain-item">算法</a>
  
  
    <span>></span>
    
  <a href="/categories/%E7%AE%97%E6%B3%95/ACM%E7%AB%9E%E8%B5%9B/" class="category-chain-item">ACM竞赛</a>
  
  
    <span>></span>
    
  <a href="/categories/%E7%AE%97%E6%B3%95/ACM%E7%AB%9E%E8%B5%9B/%E5%8E%86%E7%A8%8B/" class="category-chain-item">历程</a>
  
  

  

  

      </span>
    
  
</span>

    </div>
  
  
</div>


              
  

  <div class="license-box my-3">
    <div class="license-title">
      <div>『算法-ACM竞赛-历程』ACMer退役记(ACM的心路历程）</div>
      <div>http://example.com/2023/12/06/『算法-ACM竞赛-历程』ACMer退役记(ACM的心路历程）/</div>
    </div>
    <div class="license-meta">
      
        <div class="license-meta-item">
          <div>作者</div>
          <div>Chiam</div>
        </div>
      
      
        <div class="license-meta-item license-meta-date">
          <div>发布于</div>
          <div>2023年12月6日</div>
        </div>
      
      
      
        <div class="license-meta-item">
          <div>许可协议</div>
          <div>
            
              
              
                <a class="print-no-link" target="_blank" href="https://creativecommons.org/licenses/by/4.0/">
                  <span class="hint--top hint--rounded" aria-label="BY - 署名">
                    <i class="iconfont icon-by"></i>
                  </span>
                </a>
              
            
          </div>
        </div>
      
    </div>
    <div class="license-icon iconfont"></div>
  </div>



              
                <div class="post-prevnext my-3">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2023/12/06/%E3%80%8E%E7%AE%97%E6%B3%95-ACM%E7%AB%9E%E8%B5%9B-%E5%8E%86%E7%A8%8B%E3%80%8FACM-ICPC%202019%20%E5%B1%B1%E4%B8%9C%E7%9C%81%E7%9C%81%E8%B5%9B%E6%80%BB%E7%BB%93/" title="『算法-ACM竞赛-历程』ACM-ICPC 2019 山东省省赛总结">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">『算法-ACM竞赛-历程』ACM-ICPC 2019 山东省省赛总结</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2023/12/06/%E3%80%8E%E7%AE%97%E6%B3%95-ACM%E7%AB%9E%E8%B5%9B-%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92-%E9%80%92%E6%8E%A8%E3%80%8FHDU%20Problem%20D%20%5B%20Humble%20number%20%5D%E2%80%94%E2%80%94%E5%9F%BA%E7%A1%80DP%E4%B8%91%E6%95%B0%E5%BA%8F%E5%88%97/" title="『算法-ACM竞赛-动态规划-递推』HDU Problem D [ Humble number ]——基础DP丑数序列">
                        <span class="hidden-mobile">『算法-ACM竞赛-动态规划-递推』HDU Problem D [ Humble number ]——基础DP丑数序列</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
  
  
    <article id="comments" lazyload>
      
  <div id="valine"></div>
  <script type="text/javascript">
    Fluid.utils.loadComments('#valine', function() {
      Fluid.utils.createScript('https://lib.baomitu.com/valine/1.5.1/Valine.min.js', function() {
        var options = Object.assign(
          {"appId":"fIfc7WqUDZohlQuPc2lz5mJy-MdYXbMMI","appKey":"zjlAG3ZA3o4cBHVAkjzc2Z20","path":"window.location.pathname","placeholder":"留言仅限讨论，禁止广告等行为","avatar":"retro","meta":["nick","mail","link"],"requiredFields":[],"pageSize":10,"lang":"zh-CN","highlight":false,"recordIP":false,"serverURLs":"https://fifc7wqu.api.lncldglobal.com","emojiCDN":null,"emojiMaps":null,"enableQQ":false},
          {
            el: "#valine",
            path: window.location.pathname
          }
        )
        new Valine(options);
        Fluid.utils.waitElementVisible('#valine .vcontent', () => {
          var imgSelector = '#valine .vcontent img:not(.vemoji)';
          Fluid.plugins.imageCaption(imgSelector);
          Fluid.plugins.fancyBox(imgSelector);
        })
      });
    });
  </script>
  <noscript>Please enable JavaScript to view the comments</noscript>


    </article>
  


          </article>
        </div>
      </div>
    </div>

    <div class="side-col d-none d-lg-block col-lg-2">
      
  <aside class="sidebar" style="margin-left: -1rem">
    <div id="toc">
  <p class="toc-header">
    <i class="iconfont icon-list"></i>
    <span>目录</span>
  </p>
  <div class="toc-body" id="toc-body"></div>
</div>



  </aside>


    </div>
  </div>
</div>





  



  



  



  



  







    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v" for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>

    

    
  </main>

  <footer>
    <div class="footer-inner">
  
    <div class="footer-content">
       <meta name="referrer" content="no-referrer" /> <footer id="footer" role="contentinfo"> <div class="divider"> <div class="wall"></div> <img class="animals" src="/img/footer_animals_new.png" srcset="/img/loading.gif" lazyload alt="Footer Animals"> </div> <div class="container" data-index="450"> <p> <a href="https://chiamzhang.github.io" target="_blank">DogEgg</a> <i class="iconfont icon-love"></i> <a href="#" target="_blank">LittePig</a> </p> <p> Powered by  <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-pen"></i> Theme  <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> </p> </div> </footer> 
    </div>
  
  
  
  
</div>

  </footer>

  <!-- Scripts -->
  
  <script  src="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://lib.baomitu.com/jquery/3.6.4/jquery.min.js" ></script>
<script  src="https://lib.baomitu.com/twitter-bootstrap/4.6.1/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>


  <script  src="https://lib.baomitu.com/typed.js/2.0.12/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var subtitle = document.getElementById('subtitle');
      if (!subtitle || !typing) {
        return;
      }
      var text = subtitle.getAttribute('data-typed-text');
      
        typing(text);
      
    })(window, document);
  </script>




  
    <script  src="/js/img-lazyload.js" ></script>
  




  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/tocbot/4.20.1/tocbot.min.js', function() {
    var toc = jQuery('#toc');
    if (toc.length === 0 || !window.tocbot) { return; }
    var boardCtn = jQuery('#board-ctn');
    var boardTop = boardCtn.offset().top;

    window.tocbot.init(Object.assign({
      tocSelector     : '#toc-body',
      contentSelector : '.markdown-body',
      linkClass       : 'tocbot-link',
      activeLinkClass : 'tocbot-active-link',
      listClass       : 'tocbot-list',
      isCollapsedClass: 'tocbot-is-collapsed',
      collapsibleClass: 'tocbot-is-collapsible',
      scrollSmooth    : true,
      includeTitleTags: true,
      headingsOffset  : -boardTop,
    }, CONFIG.toc));
    if (toc.find('.toc-list-item').length > 0) {
      toc.css('visibility', 'visible');
    }

    Fluid.events.registerRefreshCallback(function() {
      if ('tocbot' in window) {
        tocbot.refresh();
        var toc = jQuery('#toc');
        if (toc.length === 0 || !tocbot) {
          return;
        }
        if (toc.find('.toc-list-item').length > 0) {
          toc.css('visibility', 'visible');
        }
      }
    });
  });
</script>


  <script src=https://lib.baomitu.com/clipboard.js/2.0.11/clipboard.min.js></script>

  <script>Fluid.plugins.codeWidget();</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/anchor-js/4.3.1/anchor.min.js', function() {
    window.anchors.options = {
      placement: CONFIG.anchorjs.placement,
      visible  : CONFIG.anchorjs.visible
    };
    if (CONFIG.anchorjs.icon) {
      window.anchors.options.icon = CONFIG.anchorjs.icon;
    }
    var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
    var res = [];
    for (var item of el) {
      res.push('.markdown-body > ' + item.trim());
    }
    if (CONFIG.anchorjs.placement === 'left') {
      window.anchors.options.class = 'anchorjs-link-left';
    }
    window.anchors.add(res.join(', '));

    Fluid.events.registerRefreshCallback(function() {
      if ('anchors' in window) {
        anchors.removeAll();
        var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
        var res = [];
        for (var item of el) {
          res.push('.markdown-body > ' + item.trim());
        }
        if (CONFIG.anchorjs.placement === 'left') {
          anchors.options.class = 'anchorjs-link-left';
        }
        anchors.add(res.join(', '));
      }
    });
  });
</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js', function() {
    Fluid.plugins.fancyBox();
  });
</script>


  <script>Fluid.plugins.imageCaption();</script>

  <script  src="/js/local-search.js" ></script>




  
<script src="/js/love.js"></script>
<script src="/js/funnyTitle.js"></script>
<script src="/js/backTop.js"></script>
<script src="//cdn.jsdelivr.net/gh/bynotes/texiao/source/js/xiaoxuehua.js"></script>



<!-- 主题的启动项，将它保持在最底部 -->
<!-- the boot of the theme, keep it at the bottom -->
<script  src="/js/boot.js" ></script>


  

  <noscript>
    <div class="noscript-warning">博客在允许 JavaScript 运行的环境下浏览效果更佳</div>
  </noscript>
<script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","tagMode":false,"debug":false,"model":{"jsonPath":"/live2dw/assets/wanko.model.json"},"display":{"position":"left","width":150,"height":150,"hOffset":20,"vOffset":0},"mobile":{"show":false,"scale":0.5},"react":{"opacity":0.9},"log":false});</script></body>
</html>
